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

在之前的文章中,我寫過一篇使用selenium來模擬登陸知乎的文章,而後在很長一段時間裏都沒有而後了。。。html

不過在最近,我忽然以爲,既然已經模擬登陸到了知乎了,爲何不繼續玩玩呢?因此就創了一個項目,用來採集知乎的用戶公開信息,打算用這些數據試着分析一下月入上萬遍地走、清華北大不如狗的貴乎用戶像不像咱們想象中的那麼高質量。git

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

             

  可是仍是得主要說下:redis

    首先:我的感受,在寫一些小的demo時用框架就反而更顯得繁瑣,因此我沒有使用框架,而是本身使用requests來發起請求的。數據庫

    而後簡要解釋一下總體流程:微信

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

    這個方法是我在最後數據抓取基本結束時纔想到的,因此沒有用到,因此我在抓取數據時使用了代理IP.的。session

      (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%沒有填性別的外星人。

    咱們一直說逼乎貴乎,一聽起來就頗有檔次的感受,不負衆望,知乎用戶羣體的文化程度仍是很是高的,果真清華北大遍地走,98五、211不如狗啊,有圖爲證(詞雲中字體越大代表權重越大):

        

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

    

想了解更多Python關於爬蟲、數據分析的內容,歡迎你們關注個人微信公衆號:悟道Python

  

相關文章
相關標籤/搜索