從去年畢業工做到如今一直沒寫博客,以前一直想總結下這一年的工做經歷,可是感受有點亂,還有時間關係,也就一直擱置了,也借這篇文章簡單敘述下吧。git
開篇:
哈哈,還記得有次偶爾在博客園上看到別人發的,《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的數據庫表結構沒有給出,以後會給個詳細的表結構。