首先要感谢知乎的不封之恩~
想直接看爬取结果的朋友欢迎移步:不用再找了,python爬虫为您获取知乎有关·【计算机考研】·的高赞文章
我的初衷
———————————咱不生产经验贴,咱只是经验贴的搬运工————————————
初衷:不久前本人立志加入考研大军,在逛知乎过程中,苦于好的文章过的繁多,令人炫目,于是想尽可能多的汇总有关考研经验的高赞回答
接下来将以知乎的考研数学
话题为例,开启我的爬虫之旅
爬虫过程详解
众所周知,爬虫提取数据方式有如下三种:
- 正则表达式
- CSS选择器
- XPath
所以爬知乎用的当然不是这三者当中的任何一种啦~
要想了解如何爬取知乎信息,我们先做如下两个小实验:
-
打开知乎的一个topic页面,url:https://www.zhihu.com/topic/19768572
页面采用ajax动态加载,即页面向下滚动时,更多回答才会显示
浏览器中ctrl+shift+i
进入开发者工具,切换到Network网络窗口,页面向下滚动,会看到get请求
单击右键那段乱七八糟的东西,可以复制网址,在新标签中打开,是一段json格式的网页,打开有惊喜哦
也就是说,通过这段乱七八糟的网址,我们可以获取topic中的多个question的一个answer -
再打开知乎的一个question页面,url:https://www.zhihu.com/question/39995908
页面同样采用ajax动态加载,还是熟悉的操作,页面往下拖直到看到
同样在新标签页面中打开,这个场景似曾相识
稍微解读一下:- data[1][question][id]: 该问题的id
- data[1][created_time]: 该回答的创建时间(时间戳的格式,需要转换)
- data[1][updated_time]: 该回答的更新时间
- data[1][voteup_count]: 该回答的点赞数(正是我们想要的!)
- data[1][comment_count]: 该回答的评论数
一切自然,却不尽然!此刻我们可以通过json格式获取一个question的多个answer
——————————————惊人发现—————————————
- 知乎的
考研数学
话题下,在精华
中有很多高赞问题
,进而能查看某个高赞问题
的高赞回答
(但我们的野心是获取尽可能多的高赞回答) - topic页面中可通过
https://www.zhihu.com/api/v4/topics/....
的json格式网页,得到多个question的answer - question页面中可通过
https://www.zhihu.com/api/v4/questions/...
的json格式网页,得到一个question的多个answer
算法思想
- 已知topic的id,打开topic页面,获取精华回答中的每个高赞question的id
- 打开question,获取每个高赞answer
***注:有的回答是article专栏的形式,因此需要额外处理
算法实现
核心代码有三个文件:
ZhihuTest1: 访问question页面,获取高赞answer,保存结果
ZhihuTest2: 访问topic页面,获取questions_url,
如果为article,保存结果;
如果为question,进入ZhihuTest1
ZhihuTest3: 主程序,进入ZhihuTest2,记录了有4个考研相关topic供选
爬取的数据保存到comments.csv中
另提供.csv文件在线转markdown表格的宝藏网站:http://web.chacuo.net/charsettextmarkdown