crawler4j爬虫入门

一、nutch和crawler4

nutch的人比较多,适合大规模海量数据的爬取。 
crawler4j是一个短小精悍的爬虫。 

二、下载crawler4j源码

项目主页:https://code.google.com/p/crawler4j/。 
用Git把源码下下来导入eclipse 
爬虫业务逻辑在src/main/java下,可直接运行src/test/java下edu.uci.ics.crawler4j.examples.basic.BasicCrawlController 

架构很清晰:

edu.uci.ics.crawler4j.crawler 基本逻辑和配置 
edu.uci.ics.crawler4j.fetcher 爬取 
edu.uci.ics.crawler4j.frontier URL队列相关 
edu.uci.ics.crawler4j.parser 对爬取结果进行解析 
edu.uci.ics.crawler4j.robotstxt 检查robots.txt是否存在 
edu.uci.ics.crawler4j.url URL相关,主要是WebURL 
edu.uci.ics.crawler4j.util 是工具类 

三、源码分析

Crawler包:
            Crawler.CrawController 控制爬虫,先addseed,再开启多个爬虫,并不断监听各个爬虫存活状态。 
Crawler.WebCrawler 爬虫 
            1. Run():不断循环,每次从Frontier拿50条url,对每条url,processPage(curUrl)。 

            2. processPage(curURL):用PageFetcher.fetch爬取网页,如果curURL有redirect,则将redirect url的url加入Frontier,以后再调度;如果爬取正常,则先进行parse,生成Page,将新urls降入Frontier(新加入url的深度此时确定),调用visit(Page){用户自定义操作}。 

Crawler.Configurations 读取crawler4j.properties中的信息 
Crawler.PageFetcher 启动IdleConnectionMonitorThread,用fetch(Page, ignoreIfBinary),爬取单个Page页面。是一个static类。 


Crawler.Page 一个页面 
Crawler.PageFetchStatus 单个页面爬取的配置,如返回爬取状态数字所代表的含义等等。 
Crawler.HTMLParser 对HTML源码进行parse,存入Page中。 

Crawler.LinkExtractor 抽取出一个HTML页面中包含的所有link。

Crawler.IdleConnectionMonitorThread 用来监听连接器(用来发送get请求,获取页面),其connMgr则负责HTML请求的发送。 


url包 :
        url.WebURL 代表一条url,内含docid, depth, url值 
        url.URLCanonicalizer 将url进行normalize 


Frontier包 :
Frontier.Frontier 
        Init() 如果resumable,则从env所指home中读取已处理过得urls,scheduleAll加入调度workQueue中。 
Frontier.workQueues 要处理的页面集,如果resumable,在构造时会打开对应env中的database(PendingURLsDB),获取上一次遗留的未处理的urls。 
Frontier.inprocessPages 当前正在处理的页面集,继承workQueues,存入InProcessPagesDB数据库。 
Frontier.DocIDServer 对应数据库DocIDs,记录已经见过的页面url。 
处理流程:newurl--->workQueues--->inprovessPages--->delete 


Robotstxt包,用来判断url是否被允许。 


Util包,用来提供一些小工具。 

注意点:
1. seed页面深度为0。
2. url去重利用的是DocIDServer.newdocid(url),如果该值大于0,则表示该url以前见过。通过这个机制,所有以前见过的页面都可以被记录识别。
3. 当设定resumable后,程序跑完后就会把PendingURLsDB和DocIDs保存下来。
4. 如果不设定resumable,在运行程序前,会把env对应的home目录清空。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值