60行程式碼爬取知乎神回覆

沈仲強發表於2018-11-15

之前的一篇文章 爬蟲爬了下知乎上的神回覆,已笑趴~ 釋出後,引發了大家熱烈的反響。很多朋友覺得很神奇,私下問強哥是怎麼做到的,有的朋友還表示不太相信。其實爬取知乎神回覆很簡單,這篇文章我們就來揭曉一下背後的原理。

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

60行程式碼爬取知乎神回覆

60行程式碼爬取知乎神回覆

大家看出什麼規律了麼?短小精闢有沒有?贊同很多有沒有?所以爬取知乎神回覆我們只要爬取那些贊同多又字數少的回答就可以。簡單的兩個步驟就能實現,第一步爬取知乎回答,第二部篩選回答。是不是很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,第二個參數列示爬的是第幾頁的內容。

爬下來的內容當中有幾個需要注意的欄位,下圖中用黃框高亮出來了

60行程式碼爬取知乎神回覆

這幾個欄位的含義如下:

  • question.title - 問題的標題
  • content - 回答的內容
  • voteup_count - 贊同的數量

這些欄位在下一步篩選回答的時候會用到。

篩選回答

爬完資料後,我們來篩選一下結果。

我們用MongoDB中的聚合管道對回答做篩選(關於MongoDB的聚合管道的用法可以參考Aggregation Pipeline 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,大家可以在【Python與資料分析】公眾號後臺回覆“知乎神回覆”獲取地址。

知乎神回覆

程式碼寫完了,我們來執行下看看。恰好昨天是程式設計師節,我們就來篩選一下和程式設計師有關的神回覆。結果如下,一共75條搞笑段子?

1

作者: 夏梓耀

連結: 碼農們最常說的「謊言」有哪些?

來源: 知乎

Q: 碼農們最常說的「謊言」有哪些? A: //TODO

2

作者: 匿名使用者

連結: 在 GitHub 上保持 365 天全綠是怎樣一種體驗?

來源: 知乎

Q: 在 GitHub 上保持 365 天全綠是怎樣一種體驗? A: 曾經保持了200多天全綠,但是冷落了女朋友,一直綠到現在。

3

作者: 叛逆者

連結: 如何反駁「程式設計師離開電腦就是廢物」這個觀點?

來源: 知乎

Q: 如何反駁「程式設計師離開電腦就是廢物」這個觀點? A: 不不不,很多程式設計師在電腦前也是廢物。

4

作者: xlzd

連結: 假如有一天所有的人都使用計算機語言說話,會是怎樣的場景?

來源: 知乎

Q: 假如有一天所有的人都使用計算機語言說話,會是怎樣的場景? A: hello, world.燙燙燙燙燙燙燙�d}��R�0:�v�?.

5

作者: 知乎使用者

連結: 突然想開一家程式設計師主題的餐館,名字就叫程式設計師的菜,菜名就叫各種語言中的關鍵字,各位指點一哈,有前途沒?

來源: 知乎

Q: 突然想開一家程式設計師主題的餐館,名字就叫程式設計師的菜,菜名就叫各種語言中的關鍵字,各位指點一哈,有前途沒? A: 進門一個大大的 hello world 招牌菜叫“紅燒產品經理” 一定會爆滿的

7

作者: 匿名使用者

連結: 程式設計最基本的術語 “bug” 該怎麼翻譯?

來源: 知乎

Q: 程式設計最基本的術語 “bug” 該怎麼翻譯? A: 么蛾子,你的程式又出么蛾子了。

8

作者: neksusk

連結: 程式設計的樂趣是什麼?

來源: 知乎

Q: 程式設計的樂趣是什麼? A: 人的成就感來源於兩樣東西,創造和毀滅。

9

作者: 麥克靈偉

連結: 如何反駁「程式設計師離開電腦就是廢物」這個觀點?

來源: 知乎

Q: 如何反駁「程式設計師離開電腦就是廢物」這個觀點? A: 老實說 跟這種女人都能聊下去 你是不是想上她?

10

作者: Amb BAI

連結: 作為程式設計師,你在程式設計時吃了哪些數學的虧?

來源: 知乎

Q: 作為程式設計師,你在程式設計時吃了哪些數學的虧? A: 看論文時候一個"顯然"推了我一下午

11

作者: 知乎使用者

連結: 土豪程式設計師的裝置都有啥?

來源: 知乎

Q: 土豪程式設計師的裝置都有啥? A: 女朋友。。。

12

作者: 兔二

連結: 祈求程式碼不出 bug 該拜哪個神仙?

來源: 知乎

Q: 祈求程式碼不出 bug 該拜哪個神仙? A: 拜雍正,專治八阿哥。

13

作者: 知乎使用者

連結: 考上好大學學 IT 是不是當今中國窮人家孩子晉級中產唯一的出路?

來源: 知乎

Q: 考上好大學學 IT 是不是當今中國窮人家孩子晉級中產唯一的出路? A: 對,就4條路 寫程式碼 搞金融 在程式碼圈搞金融 在金融圈寫程式碼

14

作者: Cascade

連結: 為什麼程式設計師無論到哪兒都喜歡背電腦包,哪怕裡面沒有裝電腦?

來源: 知乎

Q: 為什麼程式設計師無論到哪兒都喜歡背電腦包,哪怕裡面沒有裝電腦? A: 因為他們沒有別的包。

15

作者: SErHo

連結: 「Talk is cheap. Show me the code」怎麼翻譯比較好?

來源: 知乎

Q: 「Talk is cheap. Show me the code」怎麼翻譯比較好? A: 屁話少說,放碼過來。

16

作者: An0th3r

連結: 為什麼程式設計師的女朋友或老婆顏值普遍要高於男方很多?還是說程式設計師已經算是婚戀市場的優質股了?

來源: 知乎

Q: 為什麼程式設計師的女朋友或老婆顏值普遍要高於男方很多?還是說程式設計師已經算是婚戀市場的優質股了? A: 程式設計師女朋友顏值高,我是服的,因為隨便問十個程式設計師他的女朋友是誰,有九個回答是新垣結衣

17

作者: fullsail

連結: 為什麼一部分人寧可買幾個機械鍵盤換著用,也不願意給自己敷一下面膜?

來源: 知乎

Q: 為什麼一部分人寧可買幾個機械鍵盤換著用,也不願意給自己敷一下面膜? A: 老子不靠臉吃飯。 老子的辛辛苦苦掙來的鈔票。老子想怎麼花就怎麼花。

18

作者: 蘇予

連結: 程式設計師夫妻結婚戒指刻什麼字好?

來源: 知乎

Q: 程式設計師夫妻結婚戒指刻什麼字好? A: 0 error 0 warning

19

作者: 蘇莉安

連結: IT 工程師被叫「碼農」時是否會不舒服?

來源: 知乎

Q: IT 工程師被叫「碼農」時是否會不舒服? A: 我們好歹還是人,產品和設計已經是狗了……

20

作者: 白如冰

連結: 為什麼一個銷售男(30歲)會約我一個男程式設計師(24歲)去小區附近的星巴克?

來源: 知乎

Q: 為什麼一個銷售男(30歲)會約我一個男程式設計師(24歲)去小區附近的星巴克? A: 根據哥多年的經驗,他應該是有巨牛逼的idea然後只差程式設計師去實現了

21

作者: 隨喜

連結: 怎麼找到喜歡程式設計師的妹子做女友?

來源: 知乎

Q: 怎麼找到喜歡程式設計師的妹子做女友? A: 看緣分,知乎上這麼多使用者,你關注到我就是緣分。

22

作者: 知乎使用者

連結: 程式設計師女朋友如何給程式設計師男朋友過生日?

來源: 知乎

Q: 程式設計師女朋友如何給程式設計師男朋友過生日? A: 告訴他,介面已經準備好了。

23

作者: 程式設計師大叔

連結: 作為程式設計師,你是如何在工作以後找到女朋友的?

來源: 知乎

Q: 作為程式設計師,你是如何在工作以後找到女朋友的? A: 題主作了這麼久的程式設計師,還喜歡女孩子已經難能可貴了。

24

作者: 某個小超

連結: 程式設計師轉行燒烤需要做哪些準備,有哪些優勢和劣勢?

來源: 知乎

Q: 程式設計師轉行燒烤需要做哪些準備,有哪些優勢和劣勢? A: 你看,你連自己做燒烤都不知道優勢劣勢在哪裡,所以,你還是需要一名產品經理。

25

作者: Jack Ma

連結: 哪些話可以惹火程式設計師?

來源: 知乎

Q: 哪些話可以惹火程式設計師? A: 路過他電腦前時說一句,呦,又在寫bug呢!

26

作者: 姚冬

連結: 我的一位老師說,Java 適用於大型軟體而 C# 適用中小型軟體。這是真的麼?

來源: 知乎

Q: 我的一位老師說,Java 適用於大型軟體而 C# 適用中小型軟體。這是真的麼? A: Java有項天賦,就是能把中小型軟體寫成大型的。 27

作者: 大貓 連結: 為什麼 2014 年程式設計師薪資那麼高? 來源: 知乎

Q: 為什麼 2014 年程式設計師薪資那麼高? A: 時薪又不高

28

作者: 廖雪峰

連結: 是不是大部分程式設計師都在抱怨工資低?

來源: 知乎

Q: 是不是大部分程式設計師都在抱怨工資低? A: 誰、誰在抱怨工資高?

29

作者: ze ran

連結: 單身程式狗解決了一個技術難題後沒有妹子可以炫耀或誇一下自己怎麼辦?

來源: 知乎

Q: 單身程式狗解決了一個技術難題後沒有妹子可以炫耀或誇一下自己怎麼辦? A: 現在你明白了吧,為什麼那麼多程式設計師要寫技術部落格。

30

作者: 知乎使用者

連結: 中國程式設計師是否偏愛「衝鋒衣+牛仔褲+運動鞋」的衣著?如果是,為何會形成這樣的潮流?

來源: 知乎

Q: 中國程式設計師是否偏愛「衝鋒衣+牛仔褲+運動鞋」的衣著?如果是,為何會形成這樣的潮流? A: 穿那麼好看給程式看嗎?

31

作者: 匿名使用者

連結: 作為 IT 從業人員,你覺得有什麼工具大大提高了你的工作效率?

來源: 知乎

Q: 作為 IT 從業人員,你覺得有什麼工具大大提高了你的工作效率? A: 單身

32

作者: 溫酒

連結: 為什麼我認為程式設計師似乎大多不善言辭?

來源: 知乎

Q: 為什麼我認為程式設計師似乎大多不善言辭? A: 你就當是我們情商低就好了, 這樣你開心, 我們也開心。

33

作者: vczh

連結: 在中國,年齡最大的程式設計師不過40歲左右,請問中國的程式設計師未來還可以做什麼?

來源: 知乎

Q: 在中國,年齡最大的程式設計師不過40歲左右,請問中國的程式設計師未來還可以做什麼? A: 這跟為什麼90後沒人活過30歲是同一個原理

34

作者: ze ran

連結: 如何回覆程式設計師發來的簡訊:「Hello world」?

來源: 知乎

Q: 如何回覆程式設計師發來的簡訊:「Hello world」? A: hello nerd.

35

作者: 李繼剛

連結: 怎麼看出 IT 男喜歡一個女生?

來源: 知乎

Q: 怎麼看出 IT 男喜歡一個女生? A: 當他拼著自己早已養成的寡言少語的習慣去死命的跟你套近乎的時候

36

作者: 叛逆者

連結: 為什麼程式設計師不應該會修電腦?

來源: 知乎

Q: 為什麼程式設計師不應該會修電腦? A: 范冰冰需要會修電視機嗎?

37

作者: 匿名使用者

連結: 同事說自己 C++ 水平全中國第一,怎麼讓他意識到自己沒那麼厲害?

來源: 知乎

Q: 同事說自己 C++ 水平全中國第一,怎麼讓他意識到自己沒那麼厲害? A: 實不相瞞,我也不是裝逼:我的 C++ 水平全國第 0。

38

作者: 劉小腦袋

連結: 為什麼 iPhone 刪軟體時,所有圖示都要抖?

來源: 知乎

Q: 為什麼 iPhone 刪軟體時,所有圖示都要抖? A: 第三方軟體是嚇得,系統自帶軟體是嘚瑟

39

作者: AcFun彈幕視訊網

連結: 左輪手槍裝有一顆子彈,對著自己頭開一槍獎勵10萬元,兩槍1億,三槍2億,四槍4億,5槍16億,值得嗎?

來源: 知乎

Q: 左輪手槍裝有一顆子彈,對著自己頭開一槍獎勵10萬元,兩槍1億,三槍2億,四槍4億,5槍16億,值得嗎? A: 只要不打要害,我告訴你,我能打到我們A站上市!!!!

40

作者: 張小賤

連結: iPhone 處理器的效能按照現在每年翻一倍的節奏,是不是很快就能趕上甚至超過臺式電腦的處理器?

來源: 知乎

Q: iPhone 處理器的效能按照現在每年翻一倍的節奏,是不是很快就能趕上甚至超過臺式電腦的處理器? A: 小時候我總覺得過兩年我就能和大我兩歲的哥哥一樣大了。

41

作者: 解磊

連結: 知乎給你帶來的最小限度的好處是什麼?

來源: 知乎

Q: 知乎給你帶來的最小限度的好處是什麼? A: 消磨時間還不覺得罪惡。

42

作者: Derek Chan

連結: 有哪些反人類的科技發明或設計?

來源: 知乎

Q: 有哪些反人類的科技發明或設計? A: 電腦連不上網,診斷以後它提示我要聯網解決

43

作者: 汪惟

連結: 為什麼設計師不願意被稱為美工?

來源: 知乎

Q: 為什麼設計師不願意被稱為美工? A: 只要工資開的高,叫我阿姨都行。

44

作者: Mr.Robot

連結: 為什麼有人認為網易雲音樂是業界良心?

來源: 知乎

Q: 為什麼有人認為網易雲音樂是業界良心? A: 有一天突然給我推送一條訊息說我要的歌詞找到了

45

作者: 知乎使用者

連結: 為什麼沒有出現無人機自毀式攻擊武器呢?恐怖分子用過嗎?

來源: 知乎

Q: 為什麼沒有出現無人機自毀式攻擊武器呢?恐怖分子用過嗎? A: 你是說導彈麼?

46

作者: 安雅

連結: 既然思想是我的,那麼為什麼有時候我控制不了我的負面情緒?

來源: 知乎

Q: 既然思想是我的,那麼為什麼有時候我控制不了我的負面情緒? A: 作業系統不會允許使用者訪問、修改及刪除核心系統檔案,因為這會損壞系統,導致執行異常。

47

作者: isotone

連結: 魯迅雖然很牛,但在這世界十大文豪裡是不是湊數的?

來源: 知乎

Q: 魯迅雖然很牛,但在這世界十大文豪裡是不是湊數的? A: 為什麼文豪要為文盲排的榜買單?

48

作者: 念缺一Miracle

連結: 人類的哪些科技已經接近瓶頸,很久沒有重大突破了?

來源: 知乎

Q: 人類的哪些科技已經接近瓶頸,很久沒有重大突破了? A: 燒開水

49

作者: vczh

連結: 如何看待某些人下載軟體喜歡到官網的偏好?

來源: 知乎

Q: 如何看待某些人下載軟體喜歡到官網的偏好? A: 同學你沒中過百度全家桶吧?

50

作者: 知乎使用者

連結: 為什麼很多人買筆記本打遊戲,而不用效能更好的桌上型電腦?

來源: 知乎

Q: 為什麼很多人買筆記本打遊戲,而不用效能更好的桌上型電腦? A: 因為買不起房子。。。

51

作者: DillyLiu

連結: 第一次聽好耳機對你帶來的震撼有多大?

來源: 知乎

Q: 第一次聽好耳機對你帶來的震撼有多大? A: 第一次聽好耳機不會給人多大震撼,但是當換回普通耳機的時候,震撼就來了

52

作者: 林燦斌

連結: Chrome 真的很費電嗎?

來源: 知乎

Q: Chrome 真的很費電嗎? A: 不費電,我現在就在用Chrome,用到現在這麼久,筆記本電量還有50%,我估訁

53

作者: 王文瀚

連結: MacBook 上安裝 Windows 後的使用體驗如何?

來源: 知乎

Q: MacBook 上安裝 Windows 後的使用體驗如何? A: 像突然間有了軟肋,並且還失去了鎧甲。

54

作者: suchsu

連結: 家裡所有有關產品都用蘋果產品是一種什麼體驗?

來源: 知乎

Q: 家裡所有有關產品都用蘋果產品是一種什麼體驗? A: 來個電話全家都響了起來

55

作者: 蛋黃醬摧毀停車場

連結: 你為什麼不買 iPhone X?

來源: 知乎

Q: 你為什麼不買 iPhone X? A: 日益增長的美好生活需要和貧窮的現實之間的矛盾

56

作者: 張鑫

連結: 為什麼有人願意花幾千元買 iPhone ,卻不願意花幾十元買正版 iPhone 軟體和遊戲?

來源: 知乎

Q: 為什麼有人願意花幾千元買 iPhone ,卻不願意花幾十元買正版 iPhone 軟體和遊戲? A: 因為他們下載不到iphone

57

作者: 苦瓜

連結: 有什麼 App 取的名字特別驚豔?

來源: 知乎

Q: 有什麼 App 取的名字特別驚豔? A: 水錶助手…是查快遞的…

58

作者: 王斯塔

連結: 你為什麼要買行動硬碟?

來源: 知乎

Q: 你為什麼要買行動硬碟? A: 條件好了也要給自己的女人們住舒適點啊

59

作者: 叛逆者

連結: 如何用 iPad 遙控 PC 關機?

來源: 知乎

Q: 如何用 iPad 遙控 PC 關機? A: 瞄準pc電源鍵扔過去

60

作者: 知乎使用者

連結: 如何評價 2016 年 9 月 7 日的蘋果釋出會?

來源: 知乎

Q: 如何評價 2016 年 9 月 7 日的蘋果釋出會? A: 為了新MacBook Pro,半年看了三場釋出會……

61

作者: 陳肖恩

連結: 如何評價 Internet Explorer?

來源: 知乎

Q: 如何評價 Internet Explorer? A: 下載其他瀏覽器的瀏覽器 -----一年後----- IE8以下好爛,做前端想哭的節奏。

62

作者: 知乎使用者

連結: 爸媽讓我攢錢買房,我卻想買蘋果電腦怎麼辦?

來源: 知乎

Q: 爸媽讓我攢錢買房,我卻想買蘋果電腦怎麼辦? A: 你要真能3年攢50萬的房子,差這1萬7買個電腦麼,大哥?

63

作者: 溫馨

連結: 有哪些垃圾手機軟體?

來源: 知乎

Q: 有哪些垃圾手機軟體? A: 簡訊攔截軟體! 攔截後告訴你它攔截了一條簡訊。 我相信99%的人會再去點進去看一下被攔截的簡訊!

64

作者: Simon阿文

連結: 一個完整的 PPT 做下來,最讓你頭疼的是什麼?

來源: 知乎

Q: 一個完整的 PPT 做下來,最讓你頭疼的是什麼? A: 怎樣向領導隱藏自己的實力。

65

作者: 孫經東

連結: 什麼是 Vim 可以做而 Emacs 做不到的?

來源: 知乎

Q: 什麼是 Vim 可以做而 Emacs 做不到的? A: 幫助烏干達的可憐兒童……

66

作者: 王二小

連結: 蘋果使用者為什麼選擇蘋果?

來源: 知乎

Q: 蘋果使用者為什麼選擇蘋果? A: 因為不用蘋果的使用者不是蘋果使用者。

67

作者: 唐缺

連結: 計算機世界裡有哪些經典謠言?

來源: 知乎

Q: 計算機世界裡有哪些經典謠言? A: windows正在聯機尋找解決方案。

68

作者: 羽扇綸巾2010

連結: 有線滑鼠會被無線滑鼠取代嗎?

來源: 知乎

Q: 有線滑鼠會被無線滑鼠取代嗎? A: 我覺得在網咖有線滑鼠就不會被取代

69

作者: 北上

連結: 計算機世界裡有哪些經典謠言?

來源: 知乎

Q: 計算機世界裡有哪些經典謠言? A: 我已閱讀並同意該條款

70

作者: 有時右逝

連結: 魔獸圈中有哪些搞笑的事件?

來源: 知乎

Q: 魔獸圈中有哪些搞笑的事件? A: 你好,我覺得我就是魔獸世界裡最大的笑話……

71

作者: CCafe

連結: 計算機系的學生都有哪些口頭禪?

來源: 知乎

Q: 計算機系的學生都有哪些口頭禪? A: 我電腦上執行的好好的啊⋯⋯

72

作者: 貝爾

連結: 在飛機上遇到了馬雲該怎麼聊天?

來源: 知乎

Q: 在飛機上遇到了馬雲該怎麼聊天? A: Hello Jack, my name is Jackson.

73

作者: 匿名使用者

連結: 如何理解馬雲說八年後房如蔥?

來源: 知乎

Q: 如何理解馬雲說八年後房如蔥? A: 趕緊買蔥啊,蔥要漲價了!!!

74

作者: Colliot

連結: 如何理解馬雲說的「把地主殺了,不等於你能富起來」這句話?

來源: 知乎

Q: 如何理解馬雲說的「把地主殺了,不等於你能富起來」這句話? A: 他的意思是「別殺我」

75

作者: justjavac

連結: 如何看待百度在魏則西事件過去之後又悄悄的把承諾整改的廣告提示顏色調淡了?

來源: 知乎

Q: 如何看待百度在魏則西事件過去之後又悄悄的把承諾整改的廣告提示顏色調淡了? A: 請大家不要黑百度,我是做前端開發的,這是時間久了,網頁CSS掉色了

相關文章