在之前的文章中,我们尝试了利用Python爬虫从知乎抓取美女图片。当时我们使用的是Selenium库,但由于这种方法效率较低,抓取数量有限。因此,在这次更新中,我们改用了Requests库,成功大幅提升了抓取量,达到了一千多张。
在第一次尝试中,我们使用Selenium进行爬虫操作,但抓取数量较少。后来,我们改用了Requests库,大大提高了抓取量。现在,我们将对比这两种方法的不同之处。
Selenium是一种自动化浏览器工具,主要用于自动化Web应用测试。尽管它广泛应用于各种场景,但它的主要功能并不是用于网络爬虫。因此,用Selenium抓取知乎的图片并不是最佳选择,这也是为什么抓取数量相对较少的原因。
Requests是一个Python库,专门用于处理HTTP请求。它的设计简洁高效,能够轻松地完成各种网络请求任务。正如官方文档所说:“唯一一个非转基因的Python HTTP库,人类可以安全享用。”这个描述也体现了作者对Requests的高度信心,我们在实际应用中也验证了这一点。
接下来,我们简要介绍一下抓取过程:
首先,我们需要找到相关的问题并获取其ID。如图所示,问题ID位于红色框内。
使用Requests库获取网页数据,具体代码如下:
python
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'
headers = {
'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=headers)
content = r.content.decode('utf-8')
txt = json.loads(content)
我们将网页信息解析到了变量txt中。
接着,我们需要用正则表达式匹配图片链接,并将其保存到本地。核心代码如下:
```python import re import urllib.request import json
imgUrls = re.findall(r'data-original="([^"]+)"', str(txt)) imgUrls = list(set(imgUrls))
path = 'yourpathhere' number = 1
for imgUrl in imgUrls: try: splitPath = imgUrl.split('.') fTail = splitPath.pop() if len(fTail) > 3: fTail = 'jpg' fileName = path + '/' + str(number) + '.' + fTail imgdata = urllib.request.urlopen(imgUrl).read() with open(fileName, 'wb') as f: f.write(imgdata) number += 1 except Exception as e: print(e) ```
以上就是整个抓取流程的概述。完整的代码可以在网上搜索到。
以下是抓取到的一些美女图片:
希望这些图片能为你带来愉快的体验。