一分钟爬取知乎5646个知乎回答(内附代码)

2020-07-14 16:19:47 浏览数 (1)

不浪费大家时间,先上目录,选择性阅读

  • 1.爬取介绍
  • 2.代码展示
  • 3.结果展示
  • 4.福利分享

批量爬取知乎回答

灵魂拷问

  • 你有多久没读过一本书了?你知道什么书最值得读吗?
  • 你有多久没看过一部电影了?你知道什么电影最值得看吗?

有人说,我知道可以去看豆瓣评分,按照评分高低排序选书,但是往往评分高的书却不容易阅读,比如下图介绍的《量子力学》,评分高达9.6,五星好评,可惜工作时间繁忙阻碍了我与它的交流(不是智商)

《量子力学》评分9.6分

这时我想到了学历平均985,年薪平均百万的知乎平台,这里人才遍地,推荐的书单准没错。于是在知乎里搜索相关书单推荐,但是这些知乎推荐动则上千条回答,不知道认准谁的回答好,要么寥寥无几的回答不一定具有参考性,所以行哥想如果我将知乎里的所有回答爬取下来进行统计,选择大家推荐最多的书籍或电影来升华自己不就实现精准升华了嘛

于是行哥花了0.1秒的时间想到了爬虫,使用10000秒的时间写了代码,爬取了知乎下5646个回答,相当于有5646个年薪百万大佬给我的书单进行投票。获得数据后进行频率排序,图表展示,检查书单前十名哪些已经读过,哪些还没读,看看我与知乎年薪百万的差距还差几本书的距离

no bb show your code

这里是核心代码展示,主要就是将知乎的问题号作为参数传入函数,然后进行批量爬取回答,使用正则表达式将每个回答里包含书名号的书籍名或者电影名提取出来,最后在保存的csv即可。

  • 代码太长,需要完整源码的可以见文末福利分享
代码语言:javascript复制

def getAnswers(qid):
    # 获取所有书籍和回答数据
    offset = 0
    book_data = {}
    while True:
        qid = qid
        print('Offset =', offset)
        # 知乎api请求
        url = "https://www.zhihu.com/api/v4/questions/{}/answers?include=content&limit=20&offset={}&platform=desktop&sort_by=default".format(
            qid, offset)
        res = requests.get(url, headers=headers)
        res.encoding = 'utf-8'
        data = res.json()
        if len(data['data']) == 0:
            break
        for line in data['data']:
            # 保存回答数据
            content = line['content']
            result = re.findall(r'《(.*?)》', content)
            for name in result:
                book_data[name] = book_data.get(name, 0)   1
        offset  = 20
    # 保存爬取的内容
    for i in book_data.keys():
        new_data = {}
        if i:
            new_data['书籍名称'] = i
            new_data['频率'] = book_data[i]
            pandas_data.append(new_data)
    df2 = pd.DataFrame(pandas_data, columns=['书籍名称', '频率'])
    df2.to_csv("book.csv",encoding="utf_8_sig")

结果展示

5464个回答一共推荐了6434本书,其中《活着》共被推荐了286次。

行哥不禁感叹,这些年薪百万的大佬居然也要考虑跟行哥一样的问题-活着,看来离年薪百万更近一步了啦。不知道你距离年薪百万还差几本书

如果前十的书都看过了,看看这前11-20的书单,这都看过的可以来文末直接查看领取6343本书的书单。这些书经过行哥确认,完全都可以在微信阅读上免费阅读,所以也不用担心找不到pdf版本。

0 人点赞