[爬蟲]抓取百萬知乎用戶數據之爬取思路


             點擊我前往Github查看源代碼   別忘記star

本項目github地址:https://github.com/wangqifan/ZhiHu     

一.如何獲取到用戶的信息

前往用戶主頁,以輪子哥為例

從中可以看到用戶的詳細信息,教育經歷主頁,主修。所在行業,公司,關注量,回答數,居住地等等。打開開發者工具欄查看網絡,即可找到,一般是html或者json這個數據在Html頁面里。

URL為https://www.zhihu.com/people/excited-vczh/answers,excited-vczh是輪子哥的id,我們只要拿到某個人的Id就可以獲取詳細信息了。

二.信息藏在哪

對這個json數據進行解析,即可找到用戶信息

根據URL下載Html頁面,解析json就可以獲取用戶信息了

三.如何獲取更多的用戶Id

每個人都有自己的關注列表,關注的人和被關注的人,抓取這些人再到這些人主頁去抓關注列表,這樣就不抽找不到用戶了

 

  這里還有nexturl,這個鏈接可以保存下來。如果isend為true的化就是列表翻到頭了,url就不必保存下來

二.爬蟲工作流程

有兩個爬蟲模塊,一個爬蟲負責重nexturl隊列中得到url,下載json並解析,得到的nexturl插入哈希表,如果插入成功,加入隊列

另外一個負責中urltoken隊列獲取urltoken,下載解析頁面,將用戶信息存入數據庫,將nexturl存入nexturl隊列

三.常見問題解決思路

 重復爬取問題

    解析得到的Urltoken肯定有大量的重復,高高興興獲取很多數據,卻發現都是重復的,那可不行。解決辦法是對於已經加入隊列的urltoken,都放到一張hash表進行標記

斷點續爬

   爬取百萬用戶是個比較大的工作量,不能保證一次性爬取完畢,對於中間數據還是要進行持久化,這里選用的是Redis數據庫,對於爬取任務加入隊列,如果程序中途停止,再次開啟只需要重新在隊列中獲取任務繼續爬起

反爬蟲問題

   抓取過於頻繁,服務器返回429.這個時候需要切換代理IP了,我有過自建代理IP池(https://github.com/wangqifan/ProxyPool),也有買過服務商提供的代理服務

   例如阿布雲:https://www.abuyun.com/

多台機器共同爬取

    任務比較大,借助實驗室的電腦,一共有10台電腦,5台電腦裝了Redis,3台做hash表,2台作隊列,具有良好的伸縮性

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM