1. 程式人生 > >用於爬取知乎某個話題下的精華問題中所有回答的爬蟲

用於爬取知乎某個話題下的精華問題中所有回答的爬蟲


思路



我的整個演算法的思路還是很簡單的,文字版步驟如下:
1、通過話題廣場進入某個話題的頁面,避免了登陸註冊頁面的驗證,查詢到對應要爬取的話題,從 url 中得到話題id
2、該頁面的所有資源採用了延遲載入,如果採用模擬瀏覽器進行載入的話還是很麻煩,經研究後發現知乎有前後端資料傳輸的api,所以獲取資料方面是基於知乎提供的api
3、設定 offset 和 limit,以及將爬取的評論用幾個正則和簡單的去重操作進行處理,就能開始獲取資料並存儲到資料庫裡

 

 

用法



1、進入某個話題,得到話題ID,拿西郵為例,url為:https://www.zhihu.com/topic/20019540/top-answers,
則得到話題id為 20019540,並在在 main 中修改對應變數值
2、在 ZhiHuCrawler.py 程式碼中設定 q_num (爬取的精華問題的個數), ans_num (爬取的回答的問題個數)
3、在 saveMysql 方法中修改 mysql 的相關連線資訊
4、執行該 ZhiHuCrawler 指令碼

 


侷限



1、知乎的反爬很簡單,但是每年都在變,所以我版本適用於 2018 年的知乎,後續未知;
2、話題id只能手動獲取,想改成非手動也很容易,可以拿上面的思路實現
3、去除髒資料時(評論去重)遇到了些困難還沒有解決,比如對於惡意刷評論(內容重複),我們需要去重,但 mysql 中blog 長文字型別無法設定為唯一索引,所以現在設想解決方法有:
1、將評論編成 MD5 值
2、改用非關係型資料庫實現去重,比如 Reddis

 

github


 

https://github.com/bw98/ZhiHu-Crawler