设为首页 收藏本站
查看: 297|回复: 0

[经验分享] 解密搜索引擎技术之爬虫Larbin

[复制链接]
累计签到:77 天
连续签到:1 天
发表于 2014-8-14 09:00:55 | 显示全部楼层 |阅读模式
一、简介
        Larbin是一个用C++开发的开源网络爬虫,有一定的定制选项和较高的网页抓取速度。
        Larbin爬虫结构图及主要模块对应关系如下图所示:
         22312037_1406726283CJ8s.jpg
        Larbin的运行过程可以描述如下:种子URL文件最初初始化*URLsDisk,读取到namedSiteList中,通过adns库调用,逐渐往Fifo<NamedSite> *dnsSites和Fifo<IPSite>*okSites内装入链接,而Fetch模块直接从Fifo<IPSite> *okSites中获得用于抓取的URL,为抓取到的网页建立hash表,以防止网页的重复抓取。然后通过html类的方法从下载到的网页中析取出新的URL,新加入前端队列的URL要求符合robots filter,并通过hash表对URL去重。一次抓取结束后进行相关的读写操作,然后通过poll函数选择适合的套接字接口,开始新的抓取。这样抓取就可以一直循环下去,直到用户终止或者发生中断。
        更多关于Larbin项目的细节(包括源码)可以参看这里。

二、安装
        这里以在CentOS 6.2下源码安装larbin-2.6.3.tar.gz为例说明之。
        解压到指定目录后,如果直接./configure,一般会出现缺少依赖makedepend的错误,如下安装改依赖即可:
        #yum install makedepend
        #./configure
        ./configure成功后,如果直接make同样会出现错误,主要如下:
        parse.c:113: error: conflicting types for ‘adns__parse_domain’
        internal.h:569: note: previous declaration of ‘adns__parse_domain’ was here
        根据提示直接去adns目录找到internal.h注释掉该函数即可。
        再次make,依然出现错误,这次主要是因为代码用老式C代码编写,具体表现如下:
        input.cc:6:22: error: iostream.h: No such file or directory
        采用如下命令替换 iostream.h为 iostream:
        #sed -i -e 's/iostream.h/iostream/g' `grep -rl iostream.h *`
        注意上面包含grep的不是单引号而是Esc键下面那个符号`。
        再次make,出现大量错误,原因同上,表现如下:
        hashTable.cc:32: error: ‘cerr’ was not declared in this scope
        hashTable.cc:41: error: ‘cerr’ was not declared in this scope
        hashTable.cc:42: error: ‘endl’ was not declared in this scop
        执行如下命令将cerr和endl替换为std::cerr和std::endl:
        #sed -i -e 's/cerr/std::cerr/g' `grep -rl cerr *`
        #sed -i -e 's/endl/std::endl/g' `grep -rl endl *`
        再次make就不会有问题了,编译完后在当前目录下会产生larbin可执行文件。
        #./larbin
        larbin_2.6.3 is starting its search
        看到上面屏幕输出说明成功启动larbin了。

三、配置
        上面方式启动larbin会使用默认配置文件larbin.conf,当然也可以如下来指定配置文件:
        #./larbin -c conf_file
        larbin的配置是通过options.h和larbin.conf结合来完成的,前者修改后需要重新编译,后者修改后只需要重启即可。
        在options.h中以下参数最好打开:
        #define SIMPLE_SAVE     //简单保存抓取页面,存在save/dxxxxx/fyyyyy文件中,每个目录下2000个文件
        #define FOLLOW_LINKS   //继续抓取子链接
        #define CGILEVEL 1         //是否获得CGI
        #define DEPTHBYSITE     //进入新的URL时是否初始化深度
        #define RELOAD             //设置此项时可以从上次终止处继续爬取,使用-scratch 选项从上次结束处重启
        #define CRASH               //用于报告严重的bugs用,以gmake debug模式编译时使用
        配置完别忘了make。
        在larbin.conf中以下参数最好打开:
        httpPort 8081                          //用于查看爬行结果的web服务端口
        inputPort 1976                         //用于设置爬行url的telnet服务端口
        pagesConnexions 100                //并行抓取网页的连接数
        dnsConnexions 5                       //并行DNS解析的数量
        depthInSite 5                                    //对一个站点的爬取深度
        waitDuration 60                                //访问同一服务器的时间间隔,不可低于30s,建议60s
        startUrl http://slashdot.org/        //起始抓取页面
        关于配置的详细可以参见这里。
        配置好就可以启动服务开始抓取了。
        关于起始抓取url除了可以设置外,还可以通过telnet localhost 1976来设置,在终端提示符下输入:
        priority:1 depth:3 test:0
        http://www.baidu.com
        这里把优先级设为了1,保证你输入的URL比一般的URL优先被抓取,如果输入了很多URL,把优先级设为0,防止run out of memory。
        depth指定抓取链接的深度,一般不要超过5。
        test设为0表示如果一面网页之前已经抓取过了,并且现在又要抓取,那就抓取,test设为1可以防止重复的抓取。
        这里设置的效果同larbin.conf中的startUrl。

四、使用
        运行:./larbin(或“nohup ./larbin &”,可使larbin在后台运行)
        中止:Ctrl+C        
        重启:./larbin -scratch
        注意停止larbin的时候不要用Ctrl+z,那样当你再次./larbin或者./larbin -scratch的时候,会出现端口已被占用,无法重新启动。
        另外,可通过http://localhost:8081来访问larbin,从页面上获取一些关于larbin运行的信息。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-23734-1-1.html 上篇帖子: Ubuntu 12.04 Freeradius 安装实际过程 下篇帖子: 关于open source bbs体系架构的介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表