Larbin下載:http://sourceforge.net/projects/larbin/files/larbin/2.6.3/larbin-2.6.3.tar.gz/downloadjava
事先安裝好這些ios
Sudo su apt-get install gccc++
Sudo su apt-get install g++web
Sudo su apt-get install xutils-dev服務器
Sudo su apt-get install makedom
Larbin的安裝:ide
tar -zxvf larbin-2.6.3.tar.gz
cd larbin-2.6.3
./configure
make函數
這時會報錯,修改
adns文件夾下internal.h文件569-571行:
adns_status adns__parse_domain(adns_state ads, int serv, adns_query qu,
vbuf *vb, parsedomain_flags flags,
const byte *dgram, int dglen, int*cbyte_io, int max);
更正爲:
adns_status adns__parse_domain(adns_state ads, int serv, adns_query qu,
vbuf *vb, adns_queryflags flags,
const byte *dgram, int dglen, int*cbyte_io, int max);測試
而後到/usr/include/c++/下CP一份iostream文件到larbin的src目錄下。並將其名改成iostream.h,在文件中添加一句using namespace std;
繼續make就能夠編譯成功了!
運行./larbin
終止ctrl+cfetch
Larbin的配置:
若是英語水平還能夠的話,最好直接看Larbin的文檔,寫得比較詳細了,並且也簡單(不是那種開發文檔),在文件夾doc中。
Larbin的配置主要經過更改當前目錄下的larbin.conf和options.h兩個文件,文檔也是針對這兩個文件來說解怎麼配置。
在larbin.conf中,幾個經常使用設置:
httpPort 8081 查看爬蟲統計數據端口
pagesConnexions 100 並行鏈接的數目
dnsConnexions5 並行請求dns的數目
depthInSite5 對一個站點訪問的深度
waitDuration60 對同一服務器兩次請求的時間間隔,不能小於30
startUrlhttp://www.mtime.com/起始url
#limitToDomain .fr .dk .uk end 拒絕爬取的域名
forbiddenExtensions 拒絕爬取如下擴展名的webpage
爲了限定Larbin只爬取圖片,在options.h中取消如下的註釋(更改該文件要從新make才能生效):
#define SPECIFICSEARCH
#define contentTypes ((char *[]) { "p_w_picpath/jpeg","p_w_picpath/jpeg", "p_w_picpath/bmp", "p_w_picpath/tiff","p_w_picpath/gif", "p_w_picpath/png", NULL })
#define privilegedExts ((char *[]) { ".jpg", ".jpeg",".bmp", "tiff", ".gif", ".png", NULL })
// how do you want to manage specific pages (select one of the followings)
//#define DEFAULT_SPECIFIC
#define SAVE_SPECIFIC
//#define DYNAMIC_SPECIFIC
同時在larbin.conf文件中,註釋掉對圖片擴展名的限制:
forbiddenExtensions
.tar .gz .tgz .zip .Z .rpm .deb
.ps .dvi .pdf
#.png .jpg .jpeg .bmp .smi .tiff .gif
.mov .avi .mpeg .mpg .mp3 .qt .wav .ram .rm
.jar .java .class .diff
.doc .xls .ppt .mdb .rtf .exe .pps .so .psd
取消下面的註釋,這個能夠保證從上次中止的地方繼續爬取:./larbin -scratch
#define RELOAD
不過有時從新啓動時會出現trouble while creating dir: File exists
網上找的緣由是:larbin Reload的實現實際上是把hash表來保存,以及它的文件隊列來實現的,若是你抓取的時間太短的話hash表不會被保存到文件上(有個數量的限制,只有達到那個抓取量,纔會把內存中的hash表同步到文件一次)。具體仍是看源碼。
另外,正常爬取一段時間以後,可能會報這樣的錯誤:
larbin: site.cc:97: voidNamedSite::putInFifo(url*): Assertion `inFifo!=outFifo' failed.
出錯地方的代碼爲:src/fetch/site.cc97行,緣由是隊列已滿,我改正的方法是直接丟棄後面的入隊的元素
void NamedSite::putInFifo(url *u) {
fifo[inFifo] = u;
inFifo = (inFifo + 1) %maxUrlsBySite;
assert(inFifo!=outFifo);
}
應該將這個函數改成:
void NamedSite::putInFifo(url *u) {
if ((inFifo + 1) %maxUrlsBySite == outFifo) //the fifo is full
return;
fifo[inFifo] = u;
inFifo = (inFifo + 1) %maxUrlsBySite;
assert(inFifo!=outFifo);
}
最後,若是還要進一步的配置,能夠更改type.h文件,也挺簡單的。
測試實驗:
爲完成做業,在我奔騰雙核,1G內存的本上爬了5個小時圖片,下面個是Larbin自帶web服務器上的統計數據:----------------------------------------------Start date: Fri Oct 14 14:45:59 2011End date: Fri Oct 14 19:46:00 2011Total time: 5:00:01Total pages: 334597(8.5G)Interesting pagestotal fetched (success): 212773total fetched (error or success) : 334597privileged links seen (.jpg, .jpeg, .bmp, tiff, .gif, .png) : 667742privileged links fetched : 345455Pages :urls treated : 468042 forb robots : 12932no dns : 31233Pages : 422325 Success : 277923 no connection : 3856early stop : 647timeout : 3212bad type : 1193too big : 73err 30X : 5744err 40X : 5824duplicate : 125398urls accepted : 3428136 / 64000000-----------------------------------------------Network traffic: 500-1200 KB/secCPU used: 4%-9% memory used:15%------------------------------------------------