從去年畢業工作到現在一直沒寫博客,之前一直想總結下這一年的工作經歷,但是感覺有點亂,還有時間關系,也就一直擱置了,也借這篇文章簡單敘述下吧。
開篇:
哈哈,還記得有次偶爾在博客園上看到別人發的,《3000w騰訊用戶數據》樣子的一篇文章,感覺很不錯,自己忍不住也想實現下QQ說說的爬蟲。
爬蟲程序大概是這個樣子的:
以下是流程圖,更清晰些:(流程圖標簽關系,其實用戶和說說只是兩個表,並不是分開的數據庫)
爬蟲效率:(數據)
圖上的標識可能看不太懂,我加下注釋。
每一列表示一個數據隊列的數據情況
Add--->隊列增加
Pop--->出隊列
Size--->當前隊列大小
接下來解釋下使用到的各個隊列。
UPend ---> UserPending 用戶等待隊列,等待爬蟲去爬取的用戶ID,從數據庫中獲取。
UFsh--->UserFinish 用戶爬取完成隊列,爬蟲爬取完成一個用戶的相關數據后,要將該用戶對應的數據庫爬取關鍵字設置為true,表示爬蟲爬取過了。
UJoin--->UserJoin 新用戶加入隊列,等待新的用戶加入數據庫中,在爬蟲爬取用戶相關數據時候,會得到新的(數據庫中不存在)用戶ID,將其放入數據庫中,用於之后爬取。
TPend--->TalkPending 說說代爬隊列,這里面保存的是待爬說說用戶的ID,從數據庫中獲取。
TJoin---> TalkJoin 新說說加入隊列,等待新爬到的說說數據放入到數據庫中。
Download---> 沒什么好書的爬蟲的網絡傳輸速率,不確定這里是否是【真實】的字節數,詳見下面下載速率計算方法。
本人用的是20Mbps的聯通網圖中可以看出,大概說說的爬取效率是1300條/s的速度,這樣一天大概是1300*24*60*60 = 112,320,000 (1億多)條。有木有很多的趕腳~
實測大約40h能爬到1億條數據,中間網路,磁盤讀寫,CPU性能等問題導致(測試機器:雙核4G,WinSrv2008,機械硬盤,外網下行100Mbps)
下邊只是發了個數據庫截圖,相信用過MongoDB的兄弟應該能看懂的。
PS:MongoDB的數據庫表結構沒有給出,之后會給個詳細的表結構。
