我用爬蟲一天時間“偷了”知乎一百萬使用者,只為證明PHP是世界上最好的語言

來源:互聯網
上載者:User

標籤:

我用爬蟲一天時間“偷了”知乎一百萬使用者,只為證明PHP是世界上最好的語言2015-08-06 猿圈

                    

我用爬蟲一天時間“偷了”知乎一百萬使用者

只為證明PHP是世界上最好的語言

 

看了不少朋友圈裡推薦的Python爬蟲文章, 都覺得太小兒科,處理內容本來就是PHP的強項,Python唯一的好處估計也就天生的Linux內建,和Perl一樣,這點覺得挺不夠意思的 Linux,還是Mac厚道,天生就內建了Python、Perl、PHP、Ruby,當然我也很討厭討論一門語言的好壞,每門語言存在就一定有它的道 理,反正PHP是全世界最好用的語言,大家都懂的!

前幾天比較火的是一個人,用C#寫了一個多線程爬蟲程式,抓取了QQ空間3000萬QQ使用者,其 中有300萬使用者是有QQ號、暱稱、空間名稱等資訊的,也就是說,有詳情也就300萬,跑了兩周,這沒什麼,為了證明PHP是全世界最好的語言,雖然大家 都懂的^_^,我用PHP寫了一個多進程爬蟲程式,只用了一天時間,就抓了知乎100萬使用者,目前跑到第8圈(depth=8)互相有關聯(關注了和關注 者)的使用者。

                                                                                        

 

                 

 

爬蟲程式設計

因為知乎需要登入才能擷取到粉絲頁面,所以從chrome登入之後把cookie拷貝下來給curl程式類比登入。

使用兩大獨立迴圈進程組(使用者索引進程組、使用者詳情進程組),用的是php的pcntl擴充,封裝了一個非常好用的類,使用起來和golang的攜程也差不多了。

下面是使用者詳情的,使用者索引代碼類似

 

               

這裡插個題外話,經過測試,我的8核的Macbook,跑16進程的速度最快,而16核的Linux伺服器,居然是跑8進程最快,這點有點讓我莫名其妙了,不過既然測試出最後進程數,就按照最後設定就好啦。

1、 使用者索引進程組先以一個使用者為起點,抓取這個使用者的關注了和粉絲,然後合并入庫,因為是多進程,所以當有兩個進程在處理同一個使用者入庫的時候就會出現重 複的使用者,所以資料庫使用者名稱欄位一定要建立唯一索引,當然也可以用redis這些第三方緩衝來保證原子性,這個就見仁見智了。

通過步驟一之後,我們就得到下面的使用者列表:

                                 

2、使用者詳情進程組按照時間正序,拿到最先入庫的使用者抓取詳情,並且把更新時間更新為目前時間,這樣就可以變成一個死迴圈,程式可以無休止的跑,不斷的迴圈更新使用者資訊。

程式穩定運行到第二天,突然沒有新資料了,檢查了一下發現知乎改規則了,不知是為了防我,還是碰巧,反正給我返回的資料是這樣的

               

第一感覺就是胡亂給我輸出資料讓我採集不到,換了IP、類比偽裝了些資料,都沒用,突然感覺這個很熟悉,會不會是gzip?抱著懷疑的態度,試了試gzip,首先當然是告訴知乎不要給我gzip壓縮過的資料

把 ”Accept-Encoding: gzip,deflate\r\n”; 改成 ”Accept-Encoding:deflate\r\n”; 去掉了 gzip,然並卵!

看來知乎是強制要給我gzip壓縮資料了,既然如此,那我就解壓唄,查了一下php解壓gzip,發現就一個函數gzinflate,於是把擷取到得內容加上:

$content = substr($content, 10);

$content = gzinflate($content));

這裡我真想說,PHP真的是全世界最好的語言,就兩個函數,就徹底解決了問題,程式又歡快的跑起來了。

在匹配內容的時候,知乎的細心也是給了我無數的協助,例如我要分清使用者性別:

                      

                      

哈哈開玩笑的拉,其實是樣式裡面有 icon-profile-female 和 icon-profile-male ^_^

我蛋疼的抓了它那麼多使用者,到底有什麼用呢?

其實沒什麼用,我就是閑的蛋疼 ^_^

有了這些資訊,其實就可以做一些別人開頭閉口就亂吹一通的大資料分析拉。最常見的當然是:性別分布、地區分布、職業分布、每個職業的男女比例。

當然,按照關注人數、瀏覽人數、提問數、回答數等排序,看看人民都在關注什麼,民生、社會、地理、政治,整個互連網都盡收眼底拉。

也許,你還可以把頭像拿來分析,用開源的驗黃程式,把色情的篩選出來,然後去拯救東莞? ^_^然後,你還可以看看那些大學出來的人,最後都幹了什麼。

有了這些資料,是不是可以開啟腦洞 ^_^

下面是利用這些資料做出來的一些有趣的圖表,即時圖表資料可以去 http://www.epooll.com/zhihu/ 上看

             

來源:楊澤濤

 

java學習 (ID: java4fun)(←長按複製)

專註於 Java 技術分享。

 

(複製號,搜尋公眾號即可關注)

 

 

 

 

如何關注

1、將升級到最新版本,長按二維碼,選擇“識別圖中二維碼”即可關注。

2、若無法識別二維碼,在介面“添加朋友”項進入“尋找公眾號”,輸入“java學習”,亦可關注。

3、為了大家可以更好的交流java技術,可以加入qq群:432784980 “java學習”。

 

推薦文章:

 

《招聘一個靠譜的iOS》—參考答案(上)

 

點擊閱讀原文查看

 

 

我用爬蟲一天時間“偷了”知乎一百萬使用者,只為證明PHP是世界上最好的語言

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.