乙個大規模爬蟲的抓取例項

2022-08-05 04:03:10 字數 1543 閱讀 1918

乙個大規模爬蟲的抓取例項

相關引數

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...