用 Python爬了知乎“神回覆”,笑得根本停不下來
知乎上經常會有很多令人忍俊不禁的神回覆,初看之下拍案叫絕,細思之下更是回味無窮。本文就來介紹下如何爬取知乎的神回覆,揭曉其背後的原理。

知乎神回覆都有些什麼特點呢?我們先來觀察一下,如下圖:


大家看出什麼規律了麼?短小精闢有沒有?贊同很多有沒有?所以爬取知乎神回覆我們只要爬取那些贊同多又字數少的回答就可以。
簡單的兩個步驟就能實現,第一步爬取知乎回答,第二部篩選回答。是不是很 easy?
爬取知乎回答
第一步我們爬取知乎上的回答。知乎上的回答太多了,一下子爬取所有的回答會很費時,我們可以選定幾個話題,爬取這幾個話題裡的內容。
下面的函式用於爬取某一個指定話題的內容:
def get_answers_by_page(topic_id, page_no):offset = page_no * 10url = <topic_url> # topic_url是這個話題對應的urlheaders = {"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 這篇文章:
ofollow,noindex"> https:// docs.mongodb.com/manual /meta/aggregation-quick-reference/ 程式碼如下:

上面的程式碼會篩選所有贊同大於 1000、字數小於 50 的回答,篩選出來的結果就是短小精闢的神回覆。
以上是核心程式碼,完整程式碼已上傳 GitHub:
知乎神回覆
程式碼寫完了,我們來執行下看看。由於關注者大部分是程式員,我們來篩選一下和程式設計師有關的神回覆。結果如下,近百條搞笑段子:joy:

PS:段子僅僅是作為爬蟲的結果展示,供大家一笑!大家可以在評論區討論下哪個段子最逗!
1
Q: 碼農們最常說的「謊言」有哪些?
A: //TODO
2
Q: 計算機系的學生都有哪些口頭禪?
A: 我電腦上執行的好好的啊⋯⋯
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: 計算機世界裡有哪些經典謠言?
A: Windows 正在聯機尋找解決方案。
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
A: 幫助烏干達的可憐兒童……
66
Q: 蘋果使用者為什麼選擇蘋果?
A: 因為不用蘋果的使用者不是蘋果使用者。
67
Q: 為什麼程式設計師不應該會修電腦?
A: 范冰冰需要會修電視機嗎?
68
Q: 你隨身攜帶或佩戴最久的那件東西是什麼?對你有什麼特殊的意義?
A: 眼鏡,因為瞎。
69
Q: 顏值真的有那麼重要嗎?
A: 同樣是網際網路巨頭,李彥巨集是老公,而馬雲只能當爸爸。
70
Q: 為什麼人常會在黑夜裡,變得矯情萬分?
A: 要渲染的影象少了,CPU 就有空閒來思考人生了。
71
Q: 你第一次跳槽是什麼原因?後悔嗎?
A: 我上班就是為了錢,他非得和我談理想,可我的理想是不上班…
72
Q: 面試的時候被人問到為什麼你沒有去清華大學,你該怎麼回答?
A: “去了,但保安沒讓進。”
73
Q: 接了阿里 Offer 後毀約會被拉黑嗎?
A: 得打個電話,讓對方擁抱變化。
74
Q: 男生在【日常打扮】中如何才能穿出二次元的感覺,同時顯得得體又不怪異?
A: 穿女裝就好了。
75
Q: IT 界有哪些有意思的短笑話?
A: winrarsetup.rar。
76
Q: 平時開玩笑開習慣了,結果跟女生表白人家以為我是開玩笑呢,怎麼辦?
A: 她才沒誤會呢,只是她比較善良。
77
Q: 怎樣拒絕女生的告白?
A: 對不起,我是個好人。
78
Q: 你會在意你的戀人有異性閨蜜嗎?
A: 女人永遠不會明白男人為什麼懷疑她跟別的男人的友誼,因為男人太瞭解男人了!
79
Q: 如何成為“交際花”?
A: 善解人異,善解人疑,善解人意,善解人衣。
80
Q: 如何優雅地拒絕他人的表白?
A: 我知道了,你先回去等訊息吧~
81
Q: 在哪裡可更高几率遇見高質量男生?
A: 兩會的時候可以去逛逛,每個地方牛逼的大叔都在那。
82
Q: 為什麼那麼多人說自己寂寞、孤單、想找個男/女朋友,卻還是單身?
A: 因為不僅自己丑,還嫌別人長得醜。
83
Q: 做備胎是什麼感覺?
A: 每一句話都是密碼
84
Q: 滾床單來不及卸妝怎麼辦?
A: 別啊,我要的就是阿凡達。
85
Q: 男生堅持每天給女生說晚安,持續一年會怎樣?
A: IE 天天都問我要不要把它設定為預設瀏覽器,已經好幾年了。
86
Q: 女生送青蛙玩具給男生,代表什麼意思?
A: 我送你個青蛙,你好歹還我點蝌蚪吧。
87
Q: 女生的長相重要嗎?
A: 重要,一般姑娘撒個嬌就能解決的問題我都得靠武力。
88
Q: 你為什麼還單身?
A: 因為單身比較專注,單身使人進步~
89
Q: 為什麼絕大部分女生拒絕男生表白後都希望做朋友,這是什麼心態?
A: 跟你客氣一下啊,要不還能說什麼,“我們不合適,我們還是做仇人吧”
90
Q: 如何用歌詞表白?
A: 總想對你表白,我的心情是多麼豪邁。
91
Q: 表白被拒絕時你在想什麼?
A: 不愧是我看上的妹子,眼光果然不錯~
92
Q: 有個女生幫了我的忙,我想感謝她但不希望她男友誤會,我該怎麼做?
A: 你可以給她送個錦旗。。。
來源:Python與資料分析