关于爬虫Larbin

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

关于爬虫Larbin_胡作非为_新浪博客

    折腾Larbin好多天了,时间像流水一样付出,肚子里的火气也生了灭灭了生,美丽的Larbin却始终没为我爬下一份网页。
    网上写larbin的资料很多,参考过的文章不少,参数的修整也尝试过,执行larbin也耐心地跑了一次又一次。但由于C++的Eclipse终归不熟悉,设置断点的debug不能单步调试,只能执行添加注释输出,显示运行良好却总是没有结果。暂且归因为代理服务器设置不正确或者公司的代理服务器限爬虫吧。
    Larbin的代码量不算多,英文注释不少,语法也简单,所以读整体代码从语法上没有太大困难,还是一个学习C++语言编程的好机会。或许是笨或者是太缺少网络方面的编程经验了,larbin核心的抓爬及解释的流程没办法理解。
    时间可以像流水,但终不是流水。偶放不下、舍不得。现在也不是补网络基础的时间,larbin美媚就先放一下吧。明天开始还是回归MG的好,或许是熟悉的时间太长了,尽管语法结构及代码相对复杂,但MG的操作流程容易理解。我宁愿啃这个外表一般但内心善良的家伙。


一、编译,解压larbin

./configure

gmake 
出现“函数原型和定义不一致”的编译错误。这个好改:打开./adns/internal.h文件,把568-571行直接注释掉就行了。
二、修改参数文件larbin.conf及option.h后,(如何修改请学习其它介绍资料)
./larbin执行

三、

摘录部分larbin的学习资料:
http://blog.csdn.net/anzijin/article/details/3741167
http://www.cnblogs.com/zhangchaoyang/articles/2031954.html
http://blog.minidx.com/2009/01/01/1862.html
    larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人 Sébastien Ailleret独立开发。larbin目的是能够跟踪页面的url进行扩展的抓取,最后为搜索引擎提供广泛的数据来源。Larbin只是一个爬虫,也就 是说larbin只抓取网页,至于如何parse的事情则由用户自己完成。另外,如何存储到数据库以及建立索引的事情 larbin也不提供。一个简单的larbin的爬虫可以每天获取500万的网页。
一个爬虫,首先需要考虑的效率。对于网络而言,基于TCP/IP的通信编程有几种方法。

第一种是单线程阻塞,这是最简单也最容易实现的一种,一个例子:在Shell中通过curl,pcregrep等一系统命令可以直接实现一个简单的 爬虫,但同时它的效率问题也显而易见:由于是阻塞方式读取,dns解析,建立连接,写入请求,读取结果这些步骤上都会产生时间的延迟,从而无法有效的利用 服务器的全部资源。

第二种是多线程阻塞。建立多个阻塞的线程,分别请求不同的url。相对于第一种方法,它可以更有效的利用机器的资源,特别是网络资源,因为无数线程 在同时工作,所以网络会比较充分的利用,但同时对机器CPU资源的消耗也是比较大,在用户级多线程间的频繁切换对于性能的影响已经值得我们考虑。

第三种是单线程非阻塞。这是目前使用的比较多的一种做法,无论在client还是server都有着广泛的应用。在一个线程内打开多个非阻塞的连 接,通过poll/epoll /select对连接状态进行判断,在第一时间响应请求,不但充分利用了网络资源,同时也将本机CPU资源的消耗降至最低。这种方法需要对dns请求,连 接,读写操作都采用异步非阻塞操作,其中第一种比较复杂,可以采用adns作为解决方案,后面三个操作相对简单可以直接在程序内实现。

效率问题解决后就需要考虑具体的设计问题了。

url肯定需要一个单独的类进行处理,包括显示,分析url,得到主机,端口,文件数据。

然后需要对url进行排重,需要一个比较大的url Hash表。

如果还要对网页内容进行排重,则还需要一个Document Hash表。

爬过的url需要记录下来,由于量比较大,我们将它写到磁盘上,所以还需要一个FIFO的类(记作urlsDisk)。

现在需要爬的url同样需要一个FIFO类来处理,重新开始时,url会从定时从爬过的url FIFO里取出来,写到这个FIFO里。正在运行的爬虫需要从这个FIFO里读数据出来,加入到主机类的url列表里。当然,也会从前一个FIFO里直接 读url出来,不过优先级应该比这个里面出来的url低,毕竟是已经爬过的。

爬虫一般是对多个网站进行爬取,但在同时站点内dns的请求可以只做一次,这就需要将主机名独立于url,单独有一个类进行处理。

主机名解析完成后需要有一个解析完成的IP类与之应用,用于connect的时候使用。

HTML文档的解析类也要有一个,用来分析网页,取出里面的url,加入到urlsDisk。

再加上一些字符串,调度类,一个简单的爬虫基本上就完成了。
以上基本上是Larbin的设计思路,Larbin在具体实现上还有一些特殊的处理,例如带了一个webserver,以及对特殊文件的处理。 Larbin有一点设计不不太好,就是慢的访问会越来越多,占用大量的连接,需要改进,另外如果对于大规模的爬虫,这仅仅实现了抓取的部分,要分布式的扩 展还需要增加url的集中管理与调度以及前台spider的分布式算法。

你可能感兴趣的:(爬虫)