(给程序员的那些事加星标)

转自:Python与数据分析,作者:shenzhongqiang

爬取知乎神回复很简单,这篇文章我们就来揭晓一下背后的原理。

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


大家看出什么规律了么?短小精辟有没有?赞同很多有没有?所以爬取知乎神回复我们只要爬取那些赞同多又字数少的回答就可以。简单的两个步骤就能实现,第一步爬取知乎回答,第二部筛选回答。是不是很easy?

爬取知乎回答

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

def get_answers_by_page(topic_id, page_no):    offset = page_no * 10    url = <topic_url> # topic_url是这个话题对应的url    headers = {        "User-Agent": "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://docs.mongodb.com/manual/meta/aggregation-quick-reference/),代码如下

client = pymongo.MongoClient()db = client["zhihu"]items = 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,大家可以在公众号后台回复“知乎神回复”获取地址。

知乎神回复

代码写完了,我们来运行下看看。恰好昨天是程序员节,我们就来筛选一下和程序员有关的神回复。结果如下,一共75条搞笑段子?

1

Q: 码农们最常说的「谎言」有哪些?

A: //TODO

2

Q: 在 GitHub 上保持 365 天全绿是怎样一种体验?

A:

曾经保持了200多天全绿,但是冷落了女朋友,一直绿到现在。

3

Q: 如何反驳「程序员离开电脑就是废物」这个观点?

A: 不不不,很多程序员在电脑前也是废物。

4

Q: 假如有一天所有的人都使用计算机语言说话,会是怎样的场景?

A:

hello, world.烫烫烫烫烫烫烫�d}��R�0:�v�?.

5

Q: 突然想开一家程序员主题的餐馆,名字就叫程序员的菜,菜名就叫各种语言中的关键字,各位指点一哈,有前途没?

A: 进门一个大大的 hello world 
招牌菜叫“红烧产品经理”
一定会爆满的

6

Q: 什么是递归?

A: 「不宜公开讨论的政治内容」的定义和范畴本身也属于「不宜公开讨论的政治内容」

7

Q: 编程最基本的术语 “bug” 该怎么翻译?

A:

幺蛾子,你的程序又出幺蛾子了。

8

Q: 编程的乐趣是什么?

A: 人的成就感来源于两样东西,创造和毁灭。

9

Q: 如何反驳「程序员离开电脑就是废物」这个观点?

A: 老实说 跟这种女人都能聊下去 你是不是想上她?

10

Q: 作为程序员,你在编程时吃了哪些数学的亏?

A: 看论文时候一个"显然"推了我一下午

11

Q: 土豪程序员的设备都有啥?

A: 女朋友。。。

12

Q: 祈求代码不出 bug 该拜哪个神仙?

A: 拜雍正,专治八阿哥。

13

Q: 考上好大学学 IT 是不是当今中国穷人家孩子晋级中产唯一的出路?

A: 对,就4条路
写代码
搞金融
在代码圈搞金融
在金融圈写代码

14

Q: 为什么程序员无论到哪儿都喜欢背电脑包,哪怕里面没有装电脑?

A: 因为他们没有别的包。

15

Q: 「Talk is cheap. Show me the code」怎么翻译比较好?

A: 屁话少说,放码过来。

16

Q: 为什么程序员的女朋友或老婆颜值普遍要高于男方很多?还是说程序员已经算是婚恋市场的优质股了?

A: 程序员女朋友颜值高,我是服的,因为随便问十个程序员他的女朋友是谁,有九个回答是新垣结衣

17

Q: 为什么一部分人宁可买几个机械键盘换着用,也不愿意给自己敷一下面膜?

A:

老子不靠脸吃饭。

老子的辛辛苦苦挣来的钞票。老子想怎么花就怎么花。

18

Q: 程序员夫妻结婚戒指刻什么字好?

A: 0 error 0 warning

19

Q: IT 工程师被叫「码农」时是否会不舒服?

A: 我们好歹还是人,产品和设计已经是狗了……

20

Q: 为什么一个销售男(30岁)会约我一个男程序员(24岁)去小区附近的星巴克?

A: 根据哥多年的经验,他应该是有巨牛逼的idea然后只差程序员去实现了

21

Q: 怎么找到喜欢程序员的妹子做女友?

A: 看缘分,知乎上这么多用户,你关注到我就是缘分。

22

Q: 程序员女朋友如何给程序员男朋友过生日?

A: 告诉他,接口已经准备好了。

23

Q: 作为程序员,你是如何在工作以后找到女朋友的?

A: 题主作了这么久的程序员,还喜欢女孩子已经难能可贵了。

24

Q: 程序员转行烧烤需要做哪些准备,有哪些优势和劣势?

A: 你看,你连自己做烧烤都不知道优势劣势在哪里,所以,你还是需要一名产品经理。

25

Q: 哪些话可以惹火程序员?

A: 路过他电脑前时说一句,呦,又在写bug呢!

26

Q: 我的一位老师说,Java 适用于大型软件而 C# 适用中小型软件。这是真的么?

A: Java有项天赋,就是能把中小型软件写成大型的。

27

Q: 为什么 2014 年程序员薪资那么高?

A: 时薪又不高

28

Q: 是不是大部分程序员都在抱怨工资低?

A:

谁、谁在抱怨工资高?

29

Q: 单身程序狗解决了一个技术难题后没有妹子可以炫耀或夸一下自己怎么办?

A: 现在你明白了吧,为什么那么多程序员要写技术博客。

30

Q: 中国程序员是否偏爱「冲锋衣+牛仔裤+运动鞋」的衣着?如果是,为何会形成这样的潮流?

A: 穿那么好看给程序看吗?

31

Q: 作为 IT 从业人员,你觉得有什么工具大大提高了你的工作效率?

A:

单身

32

Q: 为什么我认为程序员似乎大多不善言辞?

A:

你就当是我们情商低就好了,

这样你开心,

我们也开心。

33

Q: 在中国,年龄最大的程序员不过40岁左右,请问中国的程序员未来还可以做什么?

A:

这跟为什么90后没人活过30岁是同一个原理

34

Q: 如何回复程序员发来的短信:「Hello world」?

A: hello nerd.

35

Q: 怎么看出 IT 男喜欢一个女生?

A: 当他拼着自己早已养成的寡言少语的习惯去死命的跟你套近乎的时候

36

Q: 为什么程序员不应该会修电脑?

A: 范冰冰需要会修电视机吗?

37

Q: 同事说自己 C++ 水平全中国第一,怎么让他意识到自己没那么厉害?

A:

实不相瞒,我也不是装逼:我的 C++ 水平全国第 0。

38

Q: 为什么 iPhone 删软件时,所有图标都要抖?

A: 第三方软件是吓得,系统自带软件是嘚瑟

39

Q: 左轮手枪装有一颗子弹,对着自己头开一枪奖励10万元,两枪1亿,三枪2亿,四枪4亿,5枪16亿,值得吗?

A:

只要不打要害,我告诉你,我能打到我们A站上市!!!!

40

Q: iPhone 处理器的性能按照现在每年翻一倍的节奏,是不是很快就能赶上甚至超过台式电脑的处理器?

A: 小时候我总觉得过两年我就能和大我两岁的哥哥一样大了。

41

Q: 知乎给你带来的最小限度的好处是什么?

A: 消磨时间还不觉得罪恶。

42

Q: 有哪些反人类的科技发明或设计?

A: 电脑连不上网,诊断以后它提示我要联网解决

43

Q: 为什么设计师不愿意被称为美工?

A: 只要工资开的高,叫我阿姨都行。

44

Q: 为什么有人认为网易云音乐是业界良心?

A: 有一天突然给我推送一条消息说我要的歌词找到了

45

Q: 为什么没有出现无人机自毁式攻击武器呢?恐怖分子用过吗?

A: 你是说导弹么?

46

Q: 既然思想是我的,那么为什么有时候我控制不了我的负面情绪?

A: 操作系统不会允许用户访问、修改及删除核心系统文件,因为这会损坏系统,导致运行异常。

47

Q: 鲁迅虽然很牛,但在这世界十大文豪里是不是凑数的?

A: 为什么文豪要为文盲排的榜买单?

48

Q: 人类的哪些科技已经接近瓶颈,很久没有重大突破了?

A: 烧开水

49

Q: 如何看待某些人下载软件喜欢到官网的偏好?

A: 同学你没中过百度全家桶吧?

50

Q: 为什么很多人买笔记本打游戏,而不用性能更好的台式机?

A: 因为买不起房子。。。

51

Q: 第一次听好耳机对你带来的震撼有多大?

A: 第一次听好耳机不会给人多大震撼,但是当换回普通耳机的时候,震撼就来了

52

Q: Chrome 真的很费电吗?

A: 不费电,我现在就在用Chrome,用到现在这么久,笔记本电量还有50%,我估讠

53

Q: MacBook 上安装 Windows 后的使用体验如何?

A: 像突然间有了软肋,并且还失去了铠甲。

54

Q: 家里所有有关产品都用苹果产品是一种什么体验?

A: 来个电话全家都响了起来

55

Q: 你为什么不买 iPhone X?

A: 日益增长的美好生活需要和贫穷的现实之间的矛盾

56

Q: 为什么有人愿意花几千元买 iPhone ,却不愿意花几十元买正版 iPhone 软件和游戏?

A: 因为他们下载不到iphone

57

Q: 有什么 App 取的名字特别惊艳?

A: 水表助手…是查快递的…

58

Q: 你为什么要买移动硬盘?

A: 条件好了也要给自己的女人们住舒适点啊

59

Q: 如何用 iPad 遥控 PC 关机?

A: 瞄准pc电源键扔过去

60

Q: 如何评价 2016 年 9 月 7 日的苹果发布会?

A: 为了新MacBook Pro,半年看了三场发布会……

61

Q: 如何评价 Internet Explorer?

A: 下载其他浏览器的浏览器
-----一年后-----
IE8以下好烂,做前端想哭的节奏。

62

Q: 爸妈让我攒钱买房,我却想买苹果电脑怎么办?

A: 你要真能3年攒50万的房子,差这1万7买个电脑么,大哥?

63

Q: 有哪些垃圾手机软件?

A: 短信拦截软件! 拦截后告诉你它拦截了一条短信。 我相信99%的人会再去点进去看一下被拦截的短信!

64

Q: 一个完整的 PPT 做下来,最让你头疼的是什么?

A: 怎样向领导隐藏自己的实力。

65

Q: 什么是 Vim 可以做而 Emacs 做不到的?

A: 帮助乌干达的可怜儿童……

66

Q: 苹果用户为什么选择苹果?

A: 因为不用苹果的用户不是苹果用户。

67

Q: 计算机世界里有哪些经典谣言?

A: windows正在联机寻找解决方案。

68

Q: 有线鼠标会被无线鼠标取代吗?

A: 我觉得在网吧有线鼠标就不会被取代

69

Q: 计算机世界里有哪些经典谣言?

A: 我已阅读并同意该条款

70

Q: 计算机系的学生都有哪些口头禅?

A: 我电脑上运行的好好的啊⋯⋯

71

Q: 如何看待百度官博公开辟谣涉李彦宏家事传闻?

A:

「中国人对隐私没那么敏感,愿意用隐私换取便利。」

——李彦宏

72

Q: 在飞机上遇到了马云该怎么聊天?

A: Hello Jack, my name is Jackson.

73

Q: 如何理解马云说八年后房如葱?

A:

赶紧买葱啊,葱要涨价了!!!

74

Q: 如何理解马云说的「把地主杀了,不等于你能富起来」这句话?

A: 他的意思是「别杀我」

75

Q: 如何看待百度在魏则西事件过去之后又悄悄的把承诺整改的广告提示颜色调淡了?

A: 请大家不要黑百度,我是做前端开发的,这是时间久了,网页CSS掉色了

推荐阅读

(点击标题可跳转阅读)

最通俗的 Python3 网络爬虫入门

10 张令人泪牛满面的程序员趣图

程序员极度崩溃的 10 个瞬间

关注「程序员的那些事」加星标,不错过圈内事

60 行代码爬取知乎神回复,笑的停不下来相关推荐

  1. 60行代码爬取知乎“神回复”,句句戳中泪点

    作者 | shenzhongqiang 转载自Python与数据分析(ID:PythonML) 之前的一篇文章<爬了下知乎神回复,笑死人了~>发布后,引发了大家热烈的反响.很多朋友觉得很神 ...

  2. 60行代码爬取知乎神回复

    之前的一篇文章 爬了下知乎神回复,笑死人了~ 发布后,引发了大家热烈的反响.很多朋友觉得很神奇,在后台问是怎么做到的,有的朋友还表示不太相信.其实爬取知乎神回复很简单,这篇文章我们就来揭晓一下背后的原 ...

  3. 如何用 60 行代码爬取知乎神回复?

    作者 | 强哥 责编 | 郭芮 知乎上经常会有很多令人忍俊不禁的神回复,初看之下拍案叫绝,细思之下更是回味无穷.本文就来介绍下如何爬取知乎的神回复,揭晓其背后的原理. 知乎神回复都有些什么特点呢?我们 ...

  4. 60行代码爬取知乎神回复,笑到停不下来

    前言:本人加入了一个不错的企鹅群,文章灵感来源也是那里,883872094群资料可以自取 爬取知乎回答 第一步我们爬取知乎上的回答.知乎上的回答太多了,一下子爬取所有的回答会很费时,我们可以选定几个话 ...

  5. Python爬取知乎“神回复”,笑得根本停不下来(附代码)

    来源:Python与数据分析 本文约4600字,建议阅读10+分钟. 本文介绍如何爬取知乎的神回复,为你揭晓其背后的原理. 知乎上经常会有很多令人忍俊不禁的神回复,初看之下拍案叫绝,细思之下更是回味无 ...

  6. 爬取知乎神回复 | 上次笑死人,这次继续笑~

    之前的一篇文章 发布后,引发了大家热烈的反响.很多朋友觉得很神奇,在后台问老表是怎么做到的,有的朋友还表示不太相信.昨天看到强哥分享了代码,马上转载分享给大家,其实爬取知乎神回复很简单,这篇文章我们就 ...

  7. python游戏辅助lol_Python爬虫实战,60行代码爬取英雄联盟全英雄全皮肤,找寻曾今那些被删除的绝版皮肤...

    学了一周多的爬虫课后终于按捺不住了,小编决定自己手动编写爬虫程序,刚好LJ在鼓励学员分享成果,优秀作品有奖励,就把自己用Python编程爬取各大游戏高清壁纸的过程整理了出来进行投稿,与大家一起分享. ...

  8. python爬取知乎神回复

    看知乎的时候发现了一个 "如何正确地吐槽" 收藏夹,里面的一些神回复实在很搞笑,但是一页一页地看又有点麻烦,而且每次都要打开网页,于是想如果全部爬下来到一个文件里面,是不是看起来很 ...

  9. 用Python爬了知乎“神回复”,笑得根本停不下来

    知乎上经常会有很多令人忍俊不禁的神回复,初看之下拍案叫绝,细思之下更是回味无穷.本文就来介绍下如何爬取知乎的神回复,揭晓其背后的原理. 知乎神回复都有些什么特点呢?我们先来观察一下,如下图: 大家看出 ...

最新文章

  1. python函数式编程之functools、itertools、operator详解
  2. 【python】python 中的三元表达式(三目运算符)
  3. scrapy框架之递归解析和post请求
  4. 【Flink】Flink CancellationException null DefaultExecutionGraphCache LeaderRetrievalHandler
  5. [Lintcode]66. Binary Tree Preorder Traversal/[Leetcode]144. Binary Tree Preorder Traversal
  6. Enterprise Library 4.0简介及改进
  7. sql server 创建数据库 语法
  8. WIN32汇编列表框的使用
  9. matlab pn码捕获,直扩系统PN码捕获和跟踪的FPGA实现
  10. C# 设置鼠标光标为自定义图片
  11. PSP2000V3版5.03系统误删PSP文件夹的拯救方案
  12. 用Java实现简单的井字棋程序(α-β剪枝)
  13. JAVA-国密算法SM3和SM4应用Example
  14. mysql实验训练2 数据查询操作_实验训练2:数据查询操作
  15. 使用Endnotes生成知网参考文献的Latex引文格式(BibTex)
  16. C#上位机系列(4)—示波器一新窗口的建立
  17. 前端学习——html、css
  18. git中统计代码行数
  19. 5G时代,云计算发展的五大新趋势
  20. 链路聚合(手工聚合链路模式+LACP模式)

热门文章

  1. Android poi 根据已有模板生成新的doc文档
  2. 智能服务机器人产品及解决方案
  3. 记录解决问题--ie闪退
  4. 三类完整性规则mysql下规则实现短语_关系数据库有三类完整性规则,分别是参照完整性规则、用户自定义的完整性和()规则。...
  5. oracle数据库中_以下undo和redo说法错误的是,[案例]Oracle报错ORA-01157 ORA-01110 12C数据库undo异常恢复...
  6. Django:将有存量数据的自定义的用户表无痛继承自带的AbsUser
  7. 6分钟告诉你为什么要学物联网+嵌入式
  8. Could not find a version of package tomorrow-sky/test matching your minimum-stability (stable)
  9. 软件工程经验总结系列之二 - 概念阶段控制
  10. aopalliance.jar是什么?