自动化爬取json_如何爬取知乎漂亮妹纸照片第二弹

前言

在之前的一篇文章中,我们第一次尝试了用Python爬虫爬取知乎上面漂亮妹子的照片。但是,由于我们采用的是selenium来爬虫,爬取的数量极其有限。所以,这次换requests来爬虫,终于将爬取量从一百以内突破到一千多张。

为什么有第二弹

在第一弹中我们用了selenium来爬虫,爬取量非常少。我们改用requests来爬虫,成功爬取一千多张图片。就让我们简单比较一下二者的区别:

selenium是什么?

selenium自动化浏览器。就是这样!你如何运用这种力量完全取决于你自己。它主要用于自动化web应用程序以进行测试,但当然不限于此。无聊的基于web的管理任务也可以(也应该)自动化。

一些大型浏览器厂商已经(或正在)采取措施使Selenium成为其浏览器的本地部分,这些厂商支持Selenium。它也是无数其他浏览器自动化工具、api和框架的核心技术。

可以说selenium的本职工作并不是用来爬虫的,而是用于自动化Web应用程序的测试目的。所以用selenium来爬知乎上面的图其实是一种比较剑走偏锋的做法,这也解释为了为什么爬取量不是很乐观。

什么是Requests

来看看 Requests的文档:Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。

从这个幽默的介绍中,不难看出来Requests作者对于Requests非常有自信,我们用Requests爬知乎图片也刚好验证了这一点。

爬起来!

我们按照惯例简要说明一下爬虫步骤:

01.找到相关的问题,获取问题id

850ae6794aabf770cbcfab848a137603.png

如上图所示,我们需要的id就在红色框线里面。

02.用requests解析网页

get_url = 'https://www.zhihu.com/api/v4/questions/'+id+'/answers?include=data[*].is_normal,admin_closed_comment,reward_info,is_collapsed,annotation_action,annotation_detail,collapse_reason,is_sticky,collapsed_by,suggest_edit,comment_count,can_comment,content,editable_content,voteup_count,reshipment_settings,comment_permission,created_time,updated_time,review_info,relevant_info,question,excerpt,relationship.is_authorized,is_author,voting,is_thanked,is_nothelp;data[*].mark_infos[*].url;data[*].author.follower_count,badge[*].topics&limit=5&offset='+str(offset)+'&sort_by=default'        header = {            'User-Agent': "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0",            'Host': "www.zhihu.com",        }        r = requests.get(get_url, verify=False, headers=header)                content = r.content.decode("utf-8")                txt = json.loads(content)

我们把网页信息解析到了txt中。

03.匹配获得图片地址

核心代码:

imgUrls = re.findall(r'data-original="([^"]+)"', str(txt))imgUrls = list(set(imgUrls))for imgUrl in imgUrls:try:                splitPath = imgUrl.split('.')                fTail = splitPath.pop()                print(fTail)                if len(fTail) > 3 :                    fTail = 'jpg'                fileName = path +"/" + str(number) + "."+fTail                                img_data = urllib.request.urlopen(imgUrl).read()

在获取txt后,我们需要用正则表达式匹配图片的地址,然后根据这个地址下载图片到本地。

好了,原理就讲到这里,需要完整代码的同学请在网络搜索我这篇文章。

福利时间

我们选取一些爬到的漂亮妹子照片:

4a744ba236177f125615a54af74fd0e9.png
45ad2cc0b0297225b29d72f0217574a6.png
77464decceb89af126de44a5d6b0109e.png
bd93cd0bf18b5173f56ca5071d3a42b6.png
04930f4879fcef1df9a67fe7dfb73a83.png
0ad018e2c7864e113f31a668bd232fe7.png
79fb097611d5ef2760fe73eb466bb6eb.png
085b6b79a46aa3013e58458f816e3ace.png
03874cb1bc2c848d86182a4238ba6ee8.png
42d8e3a3e90bfd0282003f70b960de89.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值