前言

最近逛知乎,发现了一个问题。

        回答下很多好看的头像,因此我动了一个心思,想要制作一个小网页,可以随机返回一款好看的情头。心思既起,当然要开始付诸行动。但是想要制作如此一个网页,后台也需要拥有足够的情头头像数据,毕竟巧妇难为无米之炊嘛。
        所以通过本文,分享给大家爬取知乎问答下头像的方法~
        由于情头需要成对出现,为了方便数据清洗,所以使用了单线程模式。在使用多线程爬取时,总是顺序混乱。所以如果只是单纯为了爬取头像的小伙伴,可以自行实现多线程程序。


运行环境

  • python3.7
  • 依赖:requests

正文

首先我们来观察一下知乎问题的url格式:

其中这串数字便代表的是该问题的id号。
我们首先来设置下全局变量。

# 知乎问题id
question_id = 372666372
#爬取的回答数
answers_num = 30
#爬取起点
answer_startnum = 0
#排序方式
sorted_choi = 'default' #按时间排序则修改为updated
#爬取头像存放根目录
save_path = './'

知乎回答采取的是瀑布流加载格式,即所有回答不是一次性加载完毕的,而是随着你不断的下拉浏览逐步加载完成的。
打开f12控制器,随着我们不断下拉滑动栏。
可以看到随着问题的加载,控制栏显示:


我们点进去详细看一看:

可以发现这个返回的数据便是一个个答主的回答。得到了该项返回数据,那我们的爬虫编写便开始有眉目啦~
接下来我们看一看该项网络请求的url地址:

但是其中很多参数都是无关的,大胆猜想一下,api的构成格式如下:

https://www.zhihu.com/api/v4/questions/{问题id号}/answers?include=content&limit={返回几个答案}&offset={从第几个问题开始}&sort_by={返回类型}

我们精简一下来try一下:

数据返回正确,试验成功。

图片抓取

由于我们只需要爬取回答中的头像图片,那么便知需要用正则提取一下即可。

pattern = re.compile('''<img\s.*?\s?data-original\s*=\s*['|"]?([^\s'"]+).*?>''')

运行结果

每个答主的回答分别存放在不同的文件夹内。


完整源码

'''
author: Ericam_
createtime: 2021-01-20
description: 用于知乎图片爬取,仅学习生活使用,非商业用途。
'''
import re
import requests
import os
import time
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36","Connection": "keep-alive","Accept": "text/html,application/json,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language": "zh-CN,zh;q=0.8"}# 知乎问题id
question_id = 372666372
#爬取的回答数
answers_num = 30
#爬取起点
answer_startnum = 0
#排序方式
sorted_choi = 'default' #按时间排序则修改为updated
#爬取头像存放根目录
save_path = './'pattern = re.compile('''<img\s.*?\s?data-original\s*=\s*['|"]?([^\s'"]+).*?>''')
while answer_startnum<answers_num:try:url = url = f'https://www.zhihu.com/api/v4/questions/{question_id}/answers?include=content&limit=10&offset={answer_startnum}&sort_by=default'html = requests.get(url,headers=headers)answers = html.json()['data']for answer in answers:author = answer['author']['name']content = answer['content']results = re.findall(pattern,content)results = results[::2]imgpath = os.path.join(save_path,author)if not os.path.isdir(imgpath):os.makedirs(imgpath)for i,imgurl in enumerate(results):res = requests.get(imgurl)with open(imgpath+'/{}.jpg'.format(i),'wb') as f:f.write(res.content)time.sleep(0.5)print(i)answer_startnum += 10except requests.ConnectionError:print('Failed to connect')

情头扭蛋机

由于我在开头便讲了,头像的爬取是为了制作一款小网页嘛,可以用来随机返回一款情头。
        网页命名为【情头扭蛋机】。


        速撸的网页,偷了个懒。手机端访问应该适配,电脑访问估计样式不适配。(ps:功能不影响

访问地址:情头扭蛋机

其他

原创不易,希望大家可以留下赞 评论 收藏。
有什么想法和建议欢迎交流。
请勿随意转载!

python爬虫爬取知乎图片,轻松解决头像荒相关推荐

  1. 利用python爬取知乎评论_一个简单的python爬虫,爬取知乎

    一个简单的python爬虫,爬取知乎 主要实现 爬取一个收藏夹 里 所有问题答案下的 图片 文字信息暂未收录,可自行实现,比图片更简单 具体代码里有详细注释,请自行阅读 项目源码: 1 # -*- c ...

  2. 使用Python爬虫爬取网络美女图片

    代码地址如下: http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip instal ...

  3. Python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中

    Python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中 1.需要的Python模块 主要是requests模块,用于得到的网页的数据 安装命令为:pip install requests 2 ...

  4. python爬虫爬取知网

    python爬虫爬取知网 话不多说,直接上代码! import requests import re import time import xlrd from xlrd import open_wor ...

  5. Python爬虫-爬取知乎(小结)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:小小科 ( 想要学习Python?Python学习交流 ...

  6. 利用Python爬虫爬取网页福利图片

    最近几天,学习了爬虫算法,通过参考书籍,写下自己简单爬虫项目: 爬取某福利网站的影片海报图片 环境:anaconda3.5+spyder3.2.6 目录 1.本节目标 2.准备工作 3.抓取分析 4. ...

  7. 用Python 爬虫爬取贴吧图片

    之前一直在看机器学习,遇到了一些需要爬取数据的内容,于是稍微看了看Python爬虫,在此适当做一个记录.我也没有深入研究爬虫,大部分均是参考了网上的资源. 先推荐两个Python爬虫的教程,网址分别是 ...

  8. Python爬虫爬取知乎用户信息+寻找潜在客户

    [Python应用]寻找社交网络中的目标用户 日后的更新:由于是很久以前的课程设计项目,完整的源码已经不见了,关键的网页数据获取和解析的部分代码我在文章中已经贴出来了,但写的也不够好,如果想参考爬取知 ...

  9. python爬虫爬取网页壁纸图片(《底特律:变人》)

    参考文章:https://www.cnblogs.com/franklv/p/6829387.html 爬虫爬取网址:http://www.gamersky.com/news/201804/10396 ...

最新文章

  1. C语言优先级——取反和移位
  2. 推荐一个不到300k的Gif处理神器 - Gifsicle(免费下载)
  3. 【CyberSecurityLearning 13】简单抓包及 IP包头分析与 路由原理(一)
  4. 一个高级的makefile文件
  5. jenkins java常用插件下载,Jenkins简单介绍以及插件入门
  6. Docker下部署wordpress
  7. ubuntu 重设crontab -e的默认编辑器
  8. Python_作业_Day_1
  9. linux命令大全dfs,Linux常用的dfs命令
  10. python 定时任务 web管理_python定时任务
  11. 网络广告的效果测定与评估
  12. Unity3d 5 官方教程:UI
  13. 语音论文阅读TINY TRANSDUCER: A HIGHLY-EFFICIENT SPEECH RECOGNITION MODEL ON EDGE DEVICES
  14. 蚂蚁金融NLP竞赛——文本语义相似度赛题总结
  15. 关于程序员的「年龄歧视」问题,程序员的年龄天花板难道是35岁吗?
  16. 信用社考试计算机试题及答案,2016黑龙江省农村信用社考试题库-计算机试题及答案六...
  17. 网站被降权了怎么办?被降权后的正确处理方法
  18. 【数学】母函数(生成函数)的性质及应用
  19. MySQL-SQL优化分析
  20. 在Android上用PHP编写应用- PFA初探

热门文章

  1. Leco题目:两数之和
  2. 三菱模拟量fx3u4da_FX3U-4DA使用案例三菱FX3U-4DA用户手册(模拟量控制篇) - 广州正凌...
  3. Python 处理表格进行成绩排序的操作代码
  4. matlab 渐变色
  5. 解决阿里云端口不通 配置安全组无效
  6. Tomcat SSL Failed to load keystore type JKS with path 系统找不到指定文件
  7. linux mysql 1055_mysql 1055错误
  8. C++ PDF文档相关操作
  9. QQ安装包内置UE4是什么意义呢?会不会是奔着元宇宙,搭载了虚幻引擎的QQ在渲染数字孪生上表现更强劲?
  10. ENSP:配置静态路由表,实现不同VLAN间的通信