【转】 网站爬虫解决方案一 暨Heritrix抓取

来源:互联网 发布:非法网络众筹平台案例 编辑:程序博客网 时间:2024/04/28 06:39

转自:http://www.folo.cn/user1/12768/archives/2009/66586.html

 

网站爬虫解决方案
2007年11月09日 星期五 16:24

 

作者:行健 liu_xingjian

网站爬虫解决方案一          暨Heritrix抓取

整个步骤包括配置Heritrix处理链、抓取网页、解析和提取内容、建立索引和搜索。

一、Heritrix配置的处理链
1.PreProcessor:对抓取时的先决条件判断,如robot.txt信息,是整个处理器链的入口。
通常选择:
org.archive.crawler.prefetch.Preselector。
org.archive.crawler.prefetch.PreconditionEnforcer。

2.Fetcher:用于解析网络传输协议,如解析DNS、HTTP、FTP等。
通常选择:
org.archive.crawler.fetcher.FetchDNS。
org.archive.crawler.fetcher.FetchHTTP。

3. Extractor(这个通常可以定制):用于解析当前获取的内容,解析后取出页面中的URL,它们存入队列中,然后等待下次继续抓取。
通常选择:
org.archive.crawler.extractor.ExtractorHTTP。
org.archive.crawler.extractor.ExtractorHTML。
可以选择自己定制的类。

4. Writer:将抓取的内容写入磁盘。
通常选择:
org.archive.crawler.writer.MirrorWriterProcessor。

5. PostProcessor(这个通常可以定制):在抓取解析过程结束后,它进行一些收尾工作,比如将Extractor解析出来的URL有条件地加入到处理队列中。
通常选择:
org.archive.crawler.postprocessor.CrawlStateUpdater。
org.archive.crawler.postprocessor.LinksScoper。
org.archive.crawler.postprocessor.FrontierScheduler。
可以选择自己定制的类。

二、抓取网页
第一种抓取方式:也是最简单的方式,输入要抓取的网页起始路径,通过Heritrix的WebUI对处理链进行简单配置进行抓取。这种方式是将整个网站网页进行抓取,然后将内容保存到硬盘上。

第二种抓取方式:如果对Heritrix抓取的网页进行控制,比如只想抓取某种符合要求的URL,那么就需要对Extractor和PostProcessor进行扩展。

对Extractor进行扩展,实现一个URL过滤功能,以符合抓取要求。

主要步骤:
1.写一个类,继承Extractor。
2.调用父类的构造函数。
3.继承extract(CrawlURI )方法。
对extract()方法进行编码实现需要的功能。
对Extractor的类进行扩展后,在Processor.options中将其加入。这是在WebUI中关于Extractor的列表多了一项我们自己定义的类。
对PostProcessor进行扩展,实际是对Frontierscheduler扩展,作用是将在Extractor中所分析得出的链接加入到Frontier中,以待继续处理。例如,当抓取的时候可能希望除去符合条件的URL链接,使其内容不保存在本地。如,除去.zip,.exe的链接。可以通过继承Frontierscheduler并重新写内部的schedule(CandidateURI )方法。这样就可以让特定的信息加入队列中,比如产品的详细信息、品牌、图片。而其他信息被屏蔽掉。

三、解析和提取内容
通过以上方式可以抓取到网页,但还要从这些页面中解析出需要的文本信息,如,标题、内容、URL链接地址等。之后提出这些信息组成一个document对象,通过Lucene将document对象加入到索引,提供用户搜索用。

在实际项目中通常使用HTML解析器(如,HTMLParser)来提取网页内容。

HTMLParser,是个开源的JAVA库,它提供一系列访问本地和网络HTML资源的API接口,可以方便根据HTML元素(title,body,title等)的提取需要的信息。

四、建立索引和搜索
根据提取的内容形成document对象,将其加入到Lucene索引中,供用户搜索。

五、注意事项
1.在抓取网页的过程中,必须要对网页进行分析,抓取那些网站页面结构不经常改变的页面,最好是使用动态模板生成的。这样有利于在分析网页的时候使用相对简单的方式来从网页中解析数据。

原创粉丝点击