Larbin配备与使用

原文地址:http://www.myexception.cn/internet/1165205.html


Larbin配置与使用

安装平台:Ubuntu 10.04.1 LTS(内核版本2.6.32-29-generic)
Larbin下载:http://sourceforge.net/projects/larbin/files/larbin/2.6.3/larbin-2.6.3.tar.gz/download
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_queryqu,
         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_queryqu,
         vbuf *vb, adns_queryflags flags,
         const byte *dgram, int dglen, int *cbyte_io, int max);
然后到/usr/include/c++/下CP一份iostream文件到larbin的src目录下。并将其名改为iostream.h,在文件中添加一句usingnamespace std;
继续make就可以编译成功了!
运行 ./larbin
终止 ctrl+c


Larbin的配置:
如果英语水平还可以的话,最好直接看Larbin的文档,写得比较详细了,而且也简单(不是那种开发文档),在文件夹doc中。
Larbin的配置主要通过更改当前目录下的larbin.conf和options.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 *[]) { "image/jpeg", "image/jpeg","image/bmp", "image/tiff", "image/gif", "image/png", NULL })
#define privilegedExts ((char *[]) { ".jpg", ".jpeg", ".bmp","tiff", ".gif", ".png", NULL })
// how do you want to manage specific pages (select one of thefollowings)
//#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表同步到文件一次)。具体还是看源码。


1,正常爬取一段时间之后,可能会报这样的错误:

larbin: site.cc:97: void NamedSite::putInFifo(url*): Assertion`inFifo!=outFifo' failed.
出错地方的代码为:src/fetch/site.cc 97行,原因是队列已满,我改正的方法是直接丢弃后面的入队的元素

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);
}


2,Big Problem while reading (persistentFifo.h)
reason: Bad file descriptor
larbin: PersistentFifo.cc:209: char* PersistentFifo::readLine(): Assertion `false' failed.2,

修改larbin所在文件夹权限:
sudo chmod -R 777 larbin  


最后,如果还要进一步的配置,可以更改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%
------------------------------------------------


=======================其他配置参考=======================

arbin的配置说明:(运行命令自不用再说了)

      Larbin的配置基本涉及到两个文件。Larbin.conf及Options.h 。larbin.conf进行一些简单的配置。修改此配置文件不需要重新编译larbin。但要修改options.h则需要重新编译。这个文件是你要larbin怎么做的设置文件非常重要。修改要重新编译生成新的larbin再运行。

    1.larbin.conf

      UserAgent : 客服端标识 当对其他网站抓取时被抓取的网站知道是什么抓取的。

httpPort : 用于运行的http web服务器的端口号 (larbin运行时访问http://localhost:8081/ 设置为:httpPort 8081). 如果将端口号设为0 则不会启动web服务器。这允许larbin不作为单线程运行。通过这个查看爬行结果。

      inputPort :你要爬去的urls的端口。如果注释掉或设为0 则可能没有任何输入。如果通过手动或者程序提交爬去的urls则必须连接到计算机的TCP端口1976。即设为: inputPort 1076。可以添加爬行的url。

pagesConnexions : 并行爬取网页的数量。根据自己的网络速度调解。如果超时的太多则要降低这个并行数量。

dnsConnexions : 并行dns域名解析的数量。建议为10 。

depthInSite :对一个站点爬取得深度 。

noExternalLinks :不允许访问外部连接。如果设置则只可访问同一HOST的连接。

waitDuration :访问同一服务器的时间间隔。不可低于30s。建议60s,也不会慢。

proxy :是否用代理连接,是则要设置. 可以不用代理就不要用代理连接,用代理很慢,也可能不适合于代理特别是带有缓存的。

StartUrl : 开始爬取得url. 如:StartUrl  http://slashdot.org/

limitToDomain : 这选项可用则不可以爬行指定的特殊域名。设置方式:limitToDomain .fr .dk end 。则不允许爬行这些域名。

forbiddenExtensions : 不想要的扩展名文件。一定不要禁止.html .htm larbin爬得即使它们。实际上指定禁止也一定是无效的。

                      用法:forbiddenExtensions .tar .gz .deb

   2.options.h

     1.选择输出模式 (不用则在前面注释去掉即可)

        #define DEFAULT_OUTPUT : 默认模式。 什么都不会输出,所以不要选择这个。

#define SIMPLE_SAVE  :   简单保存。存在save/dxxxxxx/fyyyyyy文件中 每个目录下2000个文件。

#define MIRROR_SAVE  :  镜像方式存储。按网页的层次存储。可以作为网页的字典。

#define STATS_OUTPUT :  状态输出。在网页上进行状态表示。可以通过查看http://localhost:8081/output.html 查看结果。

        这些模式被定制在src/types.h中。自己可以在src/interf/useroutput.cc中定义自己的输出模式。

     2.特定查询

        设定此模式是查询特定的文件,必须定义两个参数。

        #define SPECIFICSEARCH :设置特定的查询。

#define contentTypes ((char *[]) { "audio/mpeg", NULL }) :内容类型。

#define privilegedExts ((char *[]) { ".mp3", NULL })  :文件扩展。 用于查询速度 不涉及类型 类型由上一个决定

        设置完要设置特定文件的管理

#define DEFAULT_SPECIFIC :默认管理方式。 作为html有限制除了被解析。

‍ #define SAVE_SPECIFIC :存储特定文件。 允许将文件存储在硬盘上  文件可以很大在 可以具体设置。

‍ #define DYNAMIC_SPECIFIC :动态存储模式。对于较大的文件动态的分配buffer。

        可以通过"src/fetch/specbuf.cc" and "src/fetch/specbuf.h" 定义特定文件的管理方式。

     3. 你要爬虫做什么

         #define FOLLOW_LINKS: 不继续子链接。不设置此项则html页不被解析链接也不会爬子链接。通过输入系统添加url时很有用

#define LINKS_INFO :每个网页中包含的子链接的列表。在"useroutput.cc" 用page->getLinks() 访问此信息。

#define URL_TAGS:url标签。设置此项url有一个int(默认为0)。使用输入系统统时应该给定一个int。可以通过其获取url。可以重定向。

#define NO_DUP: 不允许重复。如果设置则遇到相同网页但已遇到过时则不管。

#define EXIT_AT_END :结束退出。没有url可爬取时是否退出。设置则退出。

#define IMAGES:抓取网页中的图片。设置了此项则要更新larbin.conf中禁止项。

#define ANYTYPE:抓取任何类型网页不管其的类型。设置要更新larbin.conf。

#define COOKIES:要larbin管理cookies。只简单实现但很有用。

  4. 其他选项说明

     0 : yes ; 1 : no ; 2 : NO ! :选项参数 0要所有,1不要含有?或=的,2禁止包含通配符的。

#define CGILEVEL 1:定于选项及其参数。用于对爬行的url的限制。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

#define MAXBANDWIDTH 200000: larbin使用的带宽大小。不设置则不限带宽。

     #define DEPTHBYSITE :当url链接到其他站点时新rul的深度是已被初始化的。

  5.效率和特征

     #define THREAD_OUTPUT:是否为输入制定一个专用线程。当你在useroutput.cc定义自己的代码时必须设置此项。

             #define RELOAD:重启位置记录表。设置此项时可以从上次终止处继续爬取。使用-scratch 选项从上次结束处重启。

          6. Larbin怎样工作

             #define NOWEBSERVER:不启动服务器。不运行线程时很有用

             #define GRAPH:是否在状态也使用柱状图。

             #define NDEBUG:不启动调试信息。

             #define NOSTATS:不启动状态输出。

             #define STATS:启动状态输出。运行时每个一段时间几秒吧就会输出抓取的状态。

             #define BIGSTATS:在标准输出上显示每个被抓去的网页名字。会降低larbin速度。

             #define CRASH:用于报告严重的bugs用。以make debug模式编译时使用。    

        这个基本是我对官网上配置的翻译。呵呵。。翻译的太差了。不翻译过来看着原配置文件感觉太乱了不知道是什么东东。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值