Python分布式爬蟲抓取知乎用戶信息並進行數據分析


在以前的文章中,我寫過一篇使用selenium來模擬登錄知乎的文章,然后在很長一段時間里都沒有然后了。。。

不過在最近,我突然覺得,既然已經模擬登錄到了知乎了,為什么不繼續玩玩呢?所以就創了一個項目,用來采集知乎的用戶公開信息,打算用這些數據試着分析一下月入上萬遍地走、清華北大不如狗的貴乎用戶像不像我們想象中的那么高質量。

第一步:首先是爬蟲抓取用戶信息,能用圖解釋的絕不多廢話:

             

  但是還是得主要說下:

    首先:個人感覺,在寫一些小的demo時用框架就反而更顯得繁瑣,所以我沒有使用框架,而是自己使用requests來發起請求的。

    然后簡要解釋一下整體流程:

      (1)zhihu_login.py 是我模擬登錄的腳本,並且在前三步中,理想狀態下是利用schedule寫一個定時執行框架,定期的更換session.txt中的cookie以供后邊的抓取腳本使用,然而非常無奈,

    這個方法是我在最后數據抓取基本結束時才想到的,所以沒有用到,所以我在抓取數據時使用了代理IP.的。

      (2)畫圖時將錯誤的將第4步寫成了第5步。。。MasterFollowing.py是用來獲取用戶唯一標示:Token的,原理是:以一個用戶的url作為起始地址發起請求,遍歷該用戶的關注列表,將關注列表中的所有用戶Token都存入redis中,

    下一次請求時,將會從redis中隨機取出一個Token拼接成目標url再遍歷關注列表將Token存入redis中,因為理論上從redis中取出一個Token就會向里邊塞入少則幾十多達上百個Token(視該用戶關注人數而定),所以理論上redis中的Token值會越來越多,

    且我是以set類型來存Token的,所以會自動去重,非常方便。

      (3)activities.py是用來抓取最終用戶信息的,它每次redis中獲取一個Token,拼接成目標Url,請求用戶詳情頁面,采集到用戶信息,將其存入到數據庫中。

      (4)因為兩個腳本之間使用redis進行數據共享,即使有哪個蜘蛛宕掉,也不會造成數據丟失,達到了斷點續傳的效果。

      (5)整個過程中,唯一扯淡的是,知乎似乎對並發數做出了限制,當並發請求超過某一閥值時,請求就會被重定向到驗證頁面,即使使用了代理IP也沒用。不過我想,如果用我最終想到的方法每隔一段時間模擬請求,更換cookie的話,

    這個問題有可能會得到解決。

  整個爬蟲項目我在個人github上邊扔着,大家可以去拉下來玩玩,感興趣的可以幫我把代碼完善下,把那個定時更新cookie的代碼加上,或者各位有什么更好的方法,也可以告訴我。

  github地址:https://github.com/songsa1/zhihu_user_relationship

第二步:使用抓取下的數據進行簡單分析

  大概抓了20w左右的數據,並且數據分析的代碼也在上邊那個項目中丟着,制作圖表使用了matplotlib.

  首先我們知道,知乎個人信息中,所屬行業一共分為了14大類、98小類:      

        

  我們先看看按照小類來分的話,知乎用戶群體主要是做什么的呢?

 

  不出所料啊,互聯網行業果然是最多的,當然,也有存在誤差的可能,我是以我的知乎用戶作為起點來抓取的,我關注的人中基本都是互聯網圈中的,這樣傳遞下去,采集到的數據中IT圈中的人估計會多一些,不過窺一斑而知全豹,真實情況估計也差不太多。

  這次按照14大類來瞅一下:

  

     依舊是高新科技位居第一啊,教育行業和服務行業緊隨其后。

    然后我們再來看看知乎用戶群體的性別比例:

     

     果然男性用戶占據了一半還多,女性用戶只占了34%,當然還有14%沒有填性別的外星人。

    我們一直說逼乎貴乎,一聽起來就很有檔次的感覺,不負眾望,知乎用戶群體的文化程度還是非常高的,果然清華北大遍地走,985、211不如狗啊,有圖為證(詞雲中字體越大表明權重越大):

        

    最后我們來看看知乎用戶群體大概居住地,目測北上廣等一線新一線比較多:

    

想了解更多Python關於爬蟲、數據分析的內容,歡迎大家關注我的微信公眾號:悟道Python

  

 


免責聲明!

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



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