看到很多盆友圈裡分享的Python爬蟲文章,感覺實在有點小兒科呢,內容處理那就是PHP的強項啊。雖然我也很討厭討論一門語言的好壞,每門語言存在就一定有它的道理,但是PHP是全世界最好用的語言,在座的各位沒意見吧?
那會兒有個火極一時的多線程爬蟲程序,抓取了老馬空間幾百萬用戶,其中幾十萬用戶是有QQ號碼、暱稱、性別、年齡、所在地等信息的。不過,這算啥子嘛。
我決定用php也來操作一番,我用php花了86400秒——1440分鐘——24小時——一天的時間,也寫了一個多進程爬蟲程序,低調的抓取了知乎1000萬用戶。
(這是一張用戶詳情的代碼截圖) 知乎是需要登錄才能獲取到關注者的頁面的,所以我們從Chrome登錄之後把cookie拷貝下來給curl程序模擬登錄上去。(為什麼要用Chrome呢?精簡啊,給力啊)
通過以下步驟,我們就會得到這個用戶列表 我們先以單個用戶為起始點,抓取這個用戶的關注者和被關注者入庫。 因為是多進程,所以當有2個進程在處理同一個用戶入庫的時候就會出現重複,所以數據庫用戶名字段一定要建立唯一索引,唯一!
用戶詳情進程組 按時間拿到最先入庫的用戶詳情,並且更新時間為目前時間,這樣就會形成一個有趣的循環,程序會不停的跑,不斷的獲取用戶信息。
安安穩穩到了第二天;咦,怎麼突然沒有新數據了,檢查了一番原來知乎改規則了,看來我的動作被發現了呢(給我返回的數據是圖上這樣的) 我感覺就是瞎亂的給我輸出數據不讓我採集;換IP、模擬偽裝數據,都沒用,嗦—好像有股熟悉的感覺
gzip?我趕緊試了試gzip。把 “Accept-Encoding: gzip,deflate\r\n”;去掉了 gzip,然並卵,簡直萌萌噠! 看來得使大招了—函數gzinflate 不知道大家了不瞭解,把獲取到得內容加上: $content=substr($content, 10); $content=gzinflate($content));
哎,PHP果然是全世界最好的語言啊,隨便兩個函數,就解決了問題,程序又了跑起來~
涼風有性,秋月無邊,虧我思嬌情結,好比度日如年
) 只是—— 我抓了它那麼多用戶,是要幹嘛來著?
算了有了這些信息,我也可以做一些別人開頭閉口就亂吹一通的大數據分析拉~(不過好像還是閒的蛋疼) 最常見的當然是:
1、性別分佈
2、地域分佈
3、職業分佈
4、年齡分佈
看看人民大眾都在關注點什麼,社會、地理、政治有種眾生盡收眼底的感覺呀,還不錯嘛。 豁,我還可以這樣啊! 把頭像個拿來分析,用開源的驗黃程序,把色情的篩選出來,說不定可以拯救東莞水深火熱的人吶?