乙個大規模爬蟲的抓取例項
相關引數
page:2.5億
cost:580 dollar
time:40 hours
machine:20 amazon ec2
storage:總共抓取了1.69 tb
目的:
找到乙個有用的網路子集,實踐爬蟲和分布式計算
技術實現:
分布式爬蟲
節點:amazon ec2
集群控制:fabric
語言:python
爬取方式:
1)每個集群141個爬蟲執行緒,從alexa白名單[1]得到初始網域名稱
選擇141個是根據實驗效果達到飽和確定的
2) 任務分配:雜湊分配機器、雜湊分配執行緒;
3)從alexa開始,對每個網頁抓取;
捨棄抓取的external link,其他的加入url frontier;
在url frontier中取出url,繼續抓取;
log記錄
問題:
1.url去重:大規模爬蟲遇到的常見問題,可以用bloom filter(布隆過濾器)的庫pybloomfiltermmap和redis,但是可能造成錯誤判斷而捨棄應該抓取的url;redis的作用是儲存為url設定的鍵值,其鍵-值為(url-下一次應抓取時間),這是為了遵循為了抓取的道德準則,避免對**造成壓力
2. 1)可預見的bug和不可預見的bug,如不規範的html。一般捨棄。解析頁面一般用python的lxml庫。
2)去除外鏈會導致一些不規則的子網域名稱不能被加入爬取的流程,group.barclays.com
barclays.com的子網域名稱;解決方法是tldextract library;
3. 同時抽取多個網域名稱加入列表會導致流量負擔,姑且稱作clump problem;
解決方法是用單機的url frontier來代替全域性的url frontier
4. url的儲存方式遇到去重的問題,每個執行緒會消耗大量空間;
5. 分配執行緒跟機器的hash要用兩個獨立的函式或者用乙個
6. 截斷:因為有些html頁面太大,需要截斷。可以用網路的頁面平均大小來估計應該截斷的合理值,最後確定是200kb。
其他
spot-instance:競價例項是亞馬遜出賣自己閒置資源的一種方式,出價高的擁有例項,**比較划算。它可能是同樣計算能力的例項**的1/10。這是乙個讓人驚訝的數字。它的實體在13年底就估計達到了300萬台。但是競價例項可以隨時被亞馬遜**。
注:
[2] 該爬蟲可能會給單一站點帶來很大的流量負擔,所以為了防止被一些人輕率地濫用,作者無限期推遲發布**(也即不發布)。
乙個月入門Python爬蟲,輕鬆爬取大規模資料
python爬蟲為什麼受歡迎 如果你仔細觀察,就不難發現,懂爬蟲 學習爬蟲的人越來越多,一方面,網際網路可以獲取的資料越來越多,另一方面,像 python這樣的程式語言提供越來越多的優秀工具,讓爬蟲變得簡單 容易上手。利用爬蟲我們可以獲取大量的價值資料,從而獲得感性認識中不能得到的資訊,比如 知乎 ...
乙個簡單的爬蟲例項
獲取網頁html文字內容 usr bin python coding utf 8 import urllib import re 根據url獲取網頁html內容 defgethtmlcontent url page urllib.urlopen url return page.read 從html中...
網頁抓取 乙個用PHP實現的網頁抓取的例項
php實現的網頁抓取的例項 url contents file get contents url echo contents url ch curl init timeout 5 curl setopt ch,curlopt url,url curl setopt ch,curlopt return...