Larbin下载:http://sourceforge.net/projects/larbin/files/larbin/2.6.3/larbin-2.6.3.tar.gz/download


事先安装好这些

Sudo su apt-get install gcc

Sudo su apt-get install g++

Sudo su apt-get install xutils-dev

Sudo su apt-get install make


Larbin
的安装:

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文件到larbinsrc目录下。并将其名改为iostream.h,在文件中添加一句using namespace std;
继续make就可以编译成功了!
运行./larbin
终止ctrl+c

Larbin的配置:
如果英语水平还可以的话,最好直接看Larbin的文档,写得比较详细了,而且也简单(不是那种开发文档),在文件夹doc中。
Larbin
的配置主要通过更改当前目录下的larbin.confoptions.h两个文件,文档也是针对这两个文件来讲解怎么配置。
larbin.conf中,几个常用设置:
httpPort 8081
查看爬虫统计数据端口
pagesConnexions 100  
并行连接的数目
dnsConnexions5          
并行请求dns的数目
depthInSite5                  
对一个站点访问的深度
waitDuration60              
对同一服务器两次请求的时间间隔,不能小于30
startUrl
http://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 2011
End date: Fri Oct 14 19:46:00 2011
Total time: 5:00:01
Total pages: 334597(8.5G)
Interesting pages
total fetched (success): 212773
total fetched (error or success) : 334597
privileged links seen (.jpg, .jpeg, .bmp, tiff, .gif, .png) : 667742
privileged links fetched : 345455
Pages :
urls treated : 468042  
forb robots : 12932
no dns :    31233

Pages :      422325  
Success :    277923  
no connection : 3856
early stop :    647
timeout :    3212
bad type :    1193
too big :  73
err 30X :    5744
err 40X :    5824
duplicate :    125398
urls accepted : 3428136 / 64000000
-----------------------------------------------
Network traffic: 500-1200 KB/sec
CPU used: 4%-9%
memory used:15%
------------------------------------------------