python爬虫为您获取知乎有关考研话题的高赞文章(详解+代码)

首先要感谢知乎的不封之恩~

我的初衷

初衷:不久前本人立志加入考研大军,在逛知乎过程中,苦于好的文章过的繁多,令人炫目,于是想尽可能多的汇总有关考研经验的高赞回答
接下来将以知乎的考研数学话题为例,开启我的爬虫之旅

爬虫过程详解

众所周知,爬虫提取数据方式有如下三种:

  • 正则表达式
  • CSS选择器
  • XPath

所以爬知乎用的当然==不是==这三者当中的任何一种啦~
要想了解如何爬取知乎信息,我们先做如下两个小实验:

  1. 打开知乎的一个topic页面,url:https://www.zhihu.com/topic/19768572
    zhihu0
    页面采用ajax动态加载,即页面向下滚动时,更多回答才会显示
    浏览器中ctrl+shift+i进入开发者工具,切换到Network网络窗口,页面向下滚动,会看到get请求
    zhihu1
    单击右键那段乱七八糟的东西,可以复制网址,在新标签中打开,是一段json格式的网页,打开有惊喜哦
    zhihu2
    也就是说,通过这段乱七八糟的网址,我们可以获取topic中的多个question的一个answer

  2. 再打开知乎的一个question页面,url:https://www.zhihu.com/question/39995908
    zhihu3
    页面同样采用ajax动态加载,还是熟悉的操作,页面往下拖直到看到
    zhihu4
    同样在新标签页面中打开,这个场景似曾相识
    zhihu5
    稍微解读一下:

    • 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

算法思想

  1. 已知topic的id,打开topic页面,获取精华回答中的每个高赞question的id
  2. 打开question,获取每个高赞answer

***注:有的回答是article专栏的形式,因此需要额外处理
zhihu6

算法实现

1
2
3
4
5
6
7
核心代码有三个文件:
ZhihuTest1: 访问question页面,获取高赞answer,保存结果
ZhihuTest2: 访问topic页面,获取questions_url,
如果为article,保存结果;
如果为question,进入ZhihuTest1
ZhihuTest3: 主程序,进入ZhihuTest2,记录了有4个考研相关topic供选
爬取的数据保存到comments.csv中

另提供.csv文件在线转markdown表格的宝藏网站:http://web.chacuo.net/charsettextmarkdown

爬虫代码地址

https://github.com/Weayer/ZhihuTest