首页新闻动态正文

用Python爬了知乎“神回复”,笑得根本停不下来【黑马web前端】

更新时间:2019年07月26日 10时52分30秒 来源:黑马程序员论坛

知乎上经常会有很多令人忍俊不禁的神回复,初看之下拍案叫绝,细思之下更是回味无穷。本文就来介绍下如何爬取知乎的神回复,揭晓其背后的原理。



知乎神回复都有些什么特点呢?我们先来观察一下,




大家看出什么规律了么?短小精辟有没有?赞同很多有没有?所以爬取知乎神回复我们只要爬取那些赞同多又字数少的回答就可以。

简单的两个步骤就能实现,第一步爬取知乎回答,第二部筛选回答。是不是很 easy?

爬取知乎回答

第一步我们爬取知乎上的回答。知乎上的回答太多了,一下子爬取所有的回答会很费时,我们可以选定几个话题,爬取这几个话题里的内容。

下面的函数用于爬取某一个指定话题的内容:
def get_answers_by_page(topic_id, page_no):    offset = page_no * 10    url = <topic_url> # topic_url是这个话题对应的url    headers = {        "User-Agent": "www.idiancai.com/Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36",    }    r = requests.get(url, verify=False, headers=headers)    content = r.content.decode("utf-8")    data = json.loads(content)    is_end = data["paging"]["is_end"]    items = data["data"]    client = pymongo.MongoClient()    db = client["zhihu"]    if len(items) > 0:        db.answers.insert_many(items)        db.saved_topics.insert({"topic_id": topic_id, "page_no": page_no})    return is_end

get_answers_by_page 函数有两个参数,第一个参数是话题的 id,第二个参数表示爬的是第几页的内容。

爬下来的内容当中有几个需要注意的字段,下图中用黄框高亮出来了:



这几个字段的含义如下:
  • question.title:问题的标题。
  • content:回答的内容。
  • voteup_count:赞同的数量。

这些字段在下一步筛选回答的时候会用到。

筛选回答

爬完数据后,我们来筛选一下结果。我们用 MongoDB 中的聚合管道对回答做筛选。

关于 MongoDB 的聚合管道的用法可以参考 Aggregation Pipeline Quick Reference 这篇文章:
https://www.smpeizi.com/manual/meta/aggregation-quick-reference/

代码如下:
client = pymongo.MongoClient()db = client["zhihu"]items = www.pzzs168.com/db.answers.aggregate([    {"$match": {"target.type": "answer"}},    {"$match": {"target.voteup_count": {"$gte": 1000}}},    {"$addFields": {"answer_len": {"$strLenCP": "$target.content"}}},    {"$match": {"answer_len": {"$lte": 50}}},])

上面的代码会筛选所有赞同大于 1000、字数小于 50 的回答,筛选出来的结果就是短小精辟的神回复。

以上是核心代码,完整代码已上传 GitHub:
https://www.aiidol.com/pythonml/answer

知乎神回复

代码写完了,我们来运行下看看。由于关注者大部分是程序员,我们来筛选一下和程序员有关的神回复。

推荐了解热门学科

java培训 Python人工智能 Web前端培训 PHP培训
区块链培训 影视制作培训 C++培训 产品经理培训
UI设计培训 新媒体培训 产品经理培训 Linux运维
大数据培训 智能机器人软件开发




传智播客是一家致力于培养高素质软件开发人才的科技公司“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。

传智播客从未停止思考

传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”

中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。

何为中高级程序员课程?

传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。




黑马程序员热门视频教程【点击播放】

Python入门教程完整版(懂中文就能学会) 零起点打开Java世界的大门
C++| 匠心之作 从0到1入门学编程 PHP|零基础入门开发者编程核心技术
Web前端入门教程_Web前端html+css+JavaScript 软件测试入门到精通


在线咨询 我要报名
和我们在线交谈!