larbin是一种开源的网络爬虫/网络蜘

时间:2023-12-10 23:44:02

larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人 Sébastien Ailleret独立开发。larbin目的是能够跟踪页面的url进行扩展的抓取,最后为搜索引擎提供广泛的数据来源。Larbin只是一个爬虫,也就 是说larbin只抓取网页,至于如何parse的事情则由用户自己完成。另外,如何存储到数据库以及建立索引的事情 larbin也不提供。一个简单的larbin的爬虫可以每天获取500万的网页。

利用larbin,我们可以轻易的获取/确定单个网站的所有链接,甚至可以镜像一个网站;也可以用它建立url 列表群,例如针对所有的网页进行 url retrive后,进行xml的联结的获取。或者是 mp3,或者定制larbin,可以作为搜索引擎的信息的来源。

http://sourceforge.net/projects/larbin/files/latest/download?source=files

larbin是一个开源的爬虫,有几个优点:首先抓取效率很高,其次支持对网站进行镜像存储。不过正因为效率高,使用larbin时要非常注意,不要把硬盘搞爆。
larbin使用c++开发的,如果需要python版本的爬虫,建议使用scrapy,模块化做的比较好,很容易定制抓取任务。
larbin已经停止维护了,网上资料也很少。之前在学校的时候用larbin下载网页,整理过一个文档,顺便发出来吧。
下面是安装指南,写的非常简单,如果想进一步了解,建议看“开源爬虫larbin分析”或者larbin主页
  • 下载larbin-2.6.3,并解压:tar
    -xzvf larbin-2.6.3.tar.gz
  • larbin-2.6.3需要使用gcc/g++ 3.3.6的版本编译。Ubuntu默认安装的最新版本的gcc,Ubuntu手动安装旧版本gcc的方法如下:
 1.下载[http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-3.3/ 3.3.6版本]:
   gcc-3.3-base_3.3.6-15ubuntu6_i386.deb;
   cpp-3.3_3.3.6-15ubuntu6_i386.deb;
   gcc-3.3_3.3.6-15ubuntu6_i386.deb;
   libstdc++5-3.3-dev_3.3.6-15ubuntu6_i386.deb;
   libstdc++5_3.3.6-15ubuntu6_i386.deb;
   g++-3.3_3.3.6-15ubuntu6_i386.deb
 2.次按照上序顺序安装:
   sudo dpkg --force-depends -i xxx.deb
  • 如果makedepend指令不存在时,安装xutils-dev包
   sudo apt-get install xutils-dev
  • 修改larbin.conf文件,建议:
   pagesConnections 500
   dnsConnections 20
   depthInSite 10
   proxy (下外网网页时须设置,但要注意把以上参数调低,以免代理瘫痪)
   startUrl www.sina.com.cn/
   startUrl www.hao123.com/
   #.png .jpg .jpeg .bmp .smi .tiff .gif  (下图像文件时把这一行注释掉)
  • 修改options.h
   #define MIRROR_SAVE
   #define IMAGES
   #define ANYTYPE
   #define RELOAD
  • 修改src/types.h
   #define fifoFileWait "Fifowait" (将fifowait改为Fifowait,此为larbin的一个bug)
   #define saveDir "save/" (根据需要配置)
  • 修改larbin代码,生成下载文件列表
 1.在src/types.h中72行添加
   #define FILELIST "LIST"
 2.在src/interf/mirrorsaveuseroutput.cc中添加引用头文件
   #include <sys/file.h>
 第65行添加
   FILE * f_list = fopen(FILELIST, "a");
   if(f_list == NULL)
       return;
   fprintf(f_list, "%s\n", filename);
   fclose(f_list);
 3.在larbin文件夹下创建一个名为LIST的空文件
  • 运行./configure
  • 修改config.make文件
   CC=gcc-3.3
   CXX=g++-3.3
  • 运行 make
  • larbin配置完毕,搞定!

记得以前同事安装过一次,还是我帮着弄好的,最近对web crawler感兴趣,所以就拿来看看。

从sourceforge下载了larbin2.6.3

解压,进入larbin的主目录

./configure ;一堆warning,还发现了一个error:为函数声明和定义不一致所引起的,修改成一致的就OK了。

若是出现gmake[2]: *** [dep-in] Error 127之类错误

需要安装makedepend工具:

# yum install imake

make;这个也会报一堆错:错误是因为larbin是由C++编写的,2006年的C++类库的使用和现在差异有些不同。此处错误的修正方式:将所有的

1
#include<iostream.h>

变成

1
#include<iostream>

即可,然后在引用cerr的.cc文件中加入

1
using namespace std;

即可。

./larbin

在oschina上找到larbin的安装文章:《网页爬虫之 Larbin 安装方法》,

1、adns目录找到internal.h文件注释掉568-572行。
?
//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);
2、sudo apt-get install xutils-dev
3、sed -i -e 's/iostream.h/iostream/g' `grep -rl iostream.h *`  
4、sed -i -e 's/cerr/std::cerr/g' `grep -rl cerr *`
5、sed -i -e 's/endl/std::endl/g' `grep -rl endl *`

6、sudo apt-get install xutils-dev

以上基本就可以编译成功了。


关于针对单站采集速度慢的解决方案:

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

配置说明:

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 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模式编译时使用。

以下是结果截图:

larbin是一种开源的网络爬虫/网络蜘
larbin是一种开源的网络爬虫/网络蜘

http://blog.chinaunix.net/uid-26722078-id-3775344.html

http://blog.chinaunix.net/uid-26548237-id-3391533.html

http://blog.sina.com.cn/s/blog_63a9d9f301014v9z.html

http://www.cnblogs.com/zhangchaoyang/articles/2031954.html

https://www.baidu.com/s?wd=larbin%20%E7%BC%96%E8%AF%91&pn=10&oq=larbin%20%E7%BC%96%E8%AF%91&tn=baiduhome_pg&ie=utf-8&rsv_idx=2&rsv_pq=b43d487a0000f36e&rsv_t=54949tMPJaQcJel2Z7ylvFE09cJS99twSmLKkBfwOcnJmTc0JGynzRQCd8KqDWGcfvdG&rsv_page=1

larbin编译成功后,有两个主要方向:一是通过相关资料读Larbin的源代码,最终的目的是自己能开发个简单的爬虫;第二个是分析得到的数据,做数据的分析与挖掘。当然,也有人想把这些数据提取出来后,怎么导入数据库。

所有源代码的读法,肯定要用到工具。在windows下可以用vs系列,而linux开发的源代码则用SourceInsight。所以这里我使用SourceInsight软件看Larbin。

首先通过网络知识了解爬虫的基本知识和基本问题。爬虫从一个URL出发,使用广度优先算法,遍历整个网站。其中涉及URL的规整化(MD5算法),URL的判重(Bloom Filter算法),爬虫队列的设计,对网络和文件存取的控制等问题。

Larbin的主函数中有Larbin爬虫的主要工作流程,其代码如下:

  1. stateMain(-count);
  2. waitBandwidth(&old);
  3. stateMain(1);
  4. for (int i=0; i<global::maxFds; i++)
  5. global::ansPoll[i] = 0;
  6. for (uint i=0; i<global::posPoll; i++)
  7. global::ansPoll[global::pollfds[i].fd] = global::pollfds[i].revents;
  8. global::posPoll = 0;
  9. stateMain(2);
  10. input();
  11. stateMain(3);
  12. sequencer();
  13. stateMain(4);
  14. fetchDns();
  15. stateMain(5);
  16. fetchOpen();
  17. stateMain(6);
  18. checkAll();
  19. // select
  20. stateMain(count++);
  21. poll(global::pollfds, global::posPoll, 10);
  22. stateMain(7);

其中,stateMain 函数其实是个简单的宏,只是将状态变量简单的设置为i,记录当前爬虫所处在第几个阶段;

  1. #define stateMain(i) (stateMain = i)

其他几个函数,网上查到的资料如下:

1.waitbandwidth() 等待带宽满足需要 
        2.input() 将需要爬取的seed URL装载进来
        3.sequencer() 对将要爬取的页面进行缓冲,确定每一轮可以进行爬取的页面 
        4.fetchDns()  获取待爬取页面的IP地址和端口号,这需要通过练习DNS服务器将URL进行转换 
        5.fetchOpen() 获取当前网页
        6.checkAll() 做一些检验和网页链接分析(也是我们可以定制化的一部分)

Larbin的安装与配置 2012-10-30 20:47:48

分类: 网络与安全

由于以前没有接触过网络爬虫,对网络爬虫仅仅停留在听过,具体怎么样不天清楚。正好,需要完成某作业,我想这样可以了解了解这方面的知识了。

   从网上看了很多网络爬虫,最后,选择了Larbin,因为这是用C++写的,对于源码可以相对比较容易的看懂。
   现在,把安装过程和相关的配置记录下来,省的以后用的时候还得查找资料。
一、Larbin的安装
   从官网上获取源码包:larbin.2.6.3。
   现在开始正式安装。
   1、 ./configure
   2、 gmake debug(debug:调试安装,当然,也可以不使用该选项)
   但是,安装过程中出现了错误,如下所示。
   1> 错误1
  1. parse.c:115: error: conflicting types for 'adns__parse_domain'
  2. internal.h:571: error: previous declaration of 'adns__parse_domain' was here
  3. parse.c:115: error: conflicting types for 'adns__parse_domain'
  4. internal.h:571: error: previous declaration of 'adns__parse_domain' was here
  5. gmake[1]: *** [parse.o] 错误 1
  6. gmake[1]: Leaving directory `/home/leo/leo/larbin-2.6.3/adns'
  7. make: *** [all] 错误 2

解决方案:

    函数原型和定义不一致这个好改:
    打开./adns/internal.h文件,把568-571行直接注释掉就行了。
   2> 错误2  
  1. -bash:./configure:command not found

解决方案:

    我上网查了查,执行了命令:chmod +x configure,然后就可以了。不晓得为什么。
二、Larbin的配置说明
1、larbin.conf文件
  1. ###############################################
  2. //客户端标记,当对其他网站抓取时,被抓取的网站知道是什么抓取的
  3.  
  4. UserAgent larbin_2.6.3
  5. ############################################
  6. # What are the inputs and ouputs of larbin
  7. # port on which is launched the http statistic webserver
  8. # if unset or set to 0, no webserver is launched
  9. //用于运行的http web服务器的端口号(larbin运行时访问http://localhost:8081/,设置为http_port 8081).如果将端口设为0,则不会启动web服务器。通过这个可以查看爬行结果。
  10.  
  11. httpPort 8081
  12. # port on which you can submit urls to fetch
  13. # no input is possible if you comment this line or use port 0
  14.  
  15. //你要爬取url的端口。如果注释掉或设为0,则可能没有任何输入。如果通过手动或者程序提交爬取的//urls,则必须练就到计算机的TCP端口1976,即设为:inputPort 1976,可以添加爬行的url。
  16.  
  17. #inputPort 1976
  18. ############################################
  19. # parameters to adapt depending on your network
  20. # Number of connexions in parallel (to adapt depending of your network speed)
  21. //并行爬取网页的数量,根据自己环境的网速调解,如果超时太多,则要降低这个并行数量
  22.  
  23. pagesConnexions 100
  24. # Number of dns calls in parallel
  25. //并行DNS域名解析的数量。
  26.  
  27. dnsConnexions 5
  28. # How deep do you want to go in a site
  29. //对一个站点的爬取的深度
  30.  
  31. depthInSite 5
  32. # do you want to follow external links
  33. //不允许访问外部链接。如果设置则只可访问同一主机的连接
  34. #noExternalLinks
  35. # time between 2 calls on the same server (in sec) : NEVER less than 30
  36. //访问同一服务器的时间间隔。不可低于30s,建议60s
  37. waitDuration 60
  38. # Make requests through a proxy (use with care)
  39. //是否用代理连接,如果用,则要设置、可以不用尽量不要用,这个选项要谨慎
  40. #proxy www 8080
  41. ##############################################
  42. # now, let's customize the search
  43. # first page to fetch (you can specify several urls)
  44. //开始爬取的URL
  45. startUrl http://slashdot.org/
  46. # Do you want to limit your search to a specific domain ?
  47. # if yes, uncomment the following line
  48. //这个选项设置了,则不可以爬行指定的特殊域名
  49. #limitToDomain .fr .dk .uk end
  50. # What are the extensions you surely don't want
  51. # never forbid .html, .htm and so on : larbin needs them
  52. //不想要的扩展名文件。一定不要禁止.html、.htm.larbin爬取的就是它们。禁止也是无效的
  53. forbiddenExtensions
  54. .tar .gz .tgz .zip .Z .rpm .deb
  55. .ps .dvi .pdf
  56. .png .jpg .jpeg .bmp .smi .tiff .gif
  57. .mov .avi .mpeg .mpg .mp3 .qt .wav .ram .rm
  58. .jar .java .class .diff
  59. .doc .xls .ppt .mdb .rtf .exe .pps .so .psd
  60. end
2、options.h
 
2.1 输出模式
  1. // Select the output module you want to use
  2. //默认模式。什么也不输出,不要选择这个
  3. #define DEFAULT_OUTPUT // do nothing...
  4. //简单保存,存在save/dxxxxx/fyyyyy文件中,每个目录下2000个文件
  5. //#define SIMPLE_SAVE // save in files named save/dxxxxxx/fyyyyyy
  6. //镜像方式存储。按网页的层次存储,可以作为网页的字典。
  7. //#define MIRROR_SAVE // save in files (respect sites hierarchy)
  8. //状态输出。在网页上进行状态输出,可以查看http://localhost:8081/output.html查看结果
  9. //#define STATS_OUTPUT // do some stats on pages

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

   这个文件中还有很多相关配置,更改后,需要重新编译。
2.2 特定查询
  1. // Set up a specific search
  2. //设置特定的查询
  3. //#define SPECIFICSEARCH
  4. //内容类型
  5. //#define contentTypes ((char *[]) { "audio/mpeg", NULL })
  6. //文件扩展。用于查询速度,不涉及类型,类型由上一个决定
  7. //#define privilegedExts ((char *[]) { ".mp3", NULL })


2.3 设置完要设置特定文件的管理
  1. #define DEFAULT_SPECIFIC //默认管理方式。 作为html有限制除了被解析。
  2. //
    存储特定文件。 允许将文件存储在硬盘上 文件可以很大在src/types.h 可以具体设置。
  3. #define SAVE_SPECIFIC
  4. //动态存储模式。对于较大的文件动态的分配buffer。
  5. #define DYNAMIC_SPECIFIC

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

2.4 你要爬虫做什么
  1. //不继续子链接。不设置此项则html页不被解析链接也不会爬子链接。通过输入系统添加url时很有用
  2. #define FOLLOW_LINKS
  3.  
  4. //每个网页中包含的子链接的列表。在"useroutput.cc" 用page->getLinks() 访问此信息。
  5. #define LINKS_INFO
  6. //url标签。设置此项url有一个int(默认为0)。使用输入系统统时应该给定一个int。可以通过其获取u//rl。可以重定向。
  7. #define URL_TAGS
  8. //不允许重复。如果设置则遇到相同网页但已遇到过时则不管。
  9. #define NO_DUP
  10. //结束退出。没有url可爬取时是否退出。设置则退出。
  11. #define EXIT_AT_END
  12. //抓取网页中的图片。设置了此项则要更新larbin.conf中禁止项。
  13. #define IMAGES
  14. //抓取任何类型网页不管其的类型。设置要更新larbin.conf。
  15. #define ANYTYPE
  16. //要larbin管理cookies。只简单实现但很有用。
  17. #define COOKIES
2.5 其他选项说明
  1. #define CGILEVEL 1        //定于选项及其参数。用于对爬行的url的限制。
  2. #define MAXBANDWIDTH 200000  //larbin使用的带宽大小。不设置则不限带宽。
  3. #define DEPTHBYSITE          //当url链接到其他站点时新rul的深度是已被初始化的。
2.6 效率和特征
  1. //是否为输入制定一个专用线程。当你在useroutput.cc定义自己的代码时必须设置此项。
  2. #define THREAD_OUTPUT
  3. //重启位置记录表。设置此项时可以从上次终止处继续爬取。使用-scratch 选项从上次结束处重启。
  4. #define RELOAD
2.7 Larbin怎么工作
  1. #define NOWEBSERVER   //不启动服务器。不运行线程时很有用
  2. #define GRAPH //是否在状态也使用柱状图。
  3. #define NDEBUG //不启动调试信息。
  4. #define NOSTATS //不启动状态输出。
  5. #define STATS //启动状态输出。运行时每个一段时间就会输出抓取的状态
  6. #define BIGSTATS //在标准输出上显示每个被抓去的网页名字。会降低larbin速度
  7. #define CRASH //用于报告严重的bugs用。以gmake debug模式编译时使用。
   备注:关于larbin配置文件详解,转自:http://terry831010.blog.163.com/blog/static/69161171201227111635189/
   感谢作者。