关于larbin的配置和使用是因为这是IR的一次作业,比较简单,但感觉有必要记录一下。因为是第一次使用larbin所以参考了,其他人的配置,分别是:
http://blog.csdn.net/lzt1983/article/details/7980551
http://terry831010.blog.163.com/blog/static/69161171201227111635189/
但首先的配置是因为我自己的原因,所以当作是原创了
我自最纠结的是开始时候由于没有仔细看博客,所以,没有安装gcc 和g++
安装这两个,首先
./configure
./make
都会出现错误。其次,也无法找到后面提到的iostream文件。
安装完成gcc和g++,进行以下步骤,这里参照了dream2009gd的博客,参见部分为:
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就可以编译成功了,具体配置如下!
配置和优化参考了Coder 的博客,基本步骤如下:
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 :存储特定文件。 允许将文件存储在硬盘上 文件可以很大在src/types.h 可以具体设置。
#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 CGILEVEL 1:定于选项及其参数。用于对爬行的url的限制。
#define MAXBANDWIDTH 200000: larbin使用的带宽大小。不设置则不限带宽。
#define DEPTHBYSITE :当url链接到其他站点时新rul的深度是已被初始化的。
#define ANYTYPE:抓取任何类型网页不管其的类型。设置要更新larbin.conf。
#define COOKIES:要larbin管理cookies。只简单实现但很有用。
4. 其他选项说明
#define CGILEVEL 1:定于选项及其参数。用于对爬行的url的限制。
#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模式编译时使用。
关于针对单站采集速度慢的解决方案:
1、将larbin.conf里面的waitDuration设置为1,这里不再考虑polite^_^, 设置为1大多数网站其实还能忍受;2、将types.h里面的maxUrlsBySite修改为254;
3、将main.cc里面的代码做如下修改:
// see if we should read again urls in fifowait
if ((global::now % 30) == 0) {
global::readPriorityWait = global::URLsPriorityWait->getLength();
global::readWait = global::URLsDiskWait->getLength();
}
if ((global::now % 30) == 15) {
global::readPriorityWait = 0;
global::readWait = 0;
}
运行 ./larbin
终止 ctrl+c