Nutch可以对多种格式的资源实现抓取,只需要做一些配置上的修改即可,下面就是一些配制方法
1、抓取 pdf|doc|xls|ppt|txt
默认情况下可以搜索txt内容,pdf|doc|xls|ppt 需要配置如下文件:
1. parse-plugins.xml: 指定文件使用的parser,默认nutch使用了第三方的tika作为parser
2. nutch-default.xml:
<name>plugin.includes</name> 默认使用tika,若单独指定,则按照如下格式:
<value>.....|parse-(text|html|js|pdf|msexcel|mspowerpoint|msword)|...
<name>http.content.limit</name> 指定从http协议读取的文件大小
<value>-1</value> -1表示无限制,不然可能会有parse incomplete exception
3. regex-urlfilter.txt 将ppt xls从过滤列表中去掉(pdf,doc默认不过滤)
4. crawl-urlfilter.txt 将ppt xls从过滤列表中去掉(pdf,doc默认不过滤)
2、解析 pdf|doc|xls|ppt|txt
用命令行执行用ant编译后的代码没有问题,问题存在于eclipse环境下。
问题原因分析:eclipse下无法区分不同jar包内相同的package下的相同class文件,而nutch下的parse-pdf插件和lib-jakarta-poi插件分别使用了两个旧版本的第三方包:PDFBox-0.74-dev.jar和poi-3.5-beta4-20081128.ar, poi-scratchpad-3.5-beta4-20081128.jar。在parse-tika插件下分别使用了pdfbox-1.1.0.jar, poi-scratchpad-3.6.jar(用于解析msoffice)和poi-3.6.jar。为了让程序执行时能够调用parse-tika所引用的包,需要在build path中remove掉以上给出的三个旧的jar包。
多格式文件解析的测试方法:执行org.apache.nutch.parse.ParserChecker的main函数,参数为需要爬取和解析的文件url。
3、解析流程
org.apache.nutch.parse.ParseUtil.parse(Content)方法是解析的入口函数,其流程是先根据输入文档的类型取得相应的parser,再调用该parser的getParse方法执行解析。若解析时间未设置为-1(无穷大),则调用runParser方法,通过timer来控制解析的超时。以解析msword为例,调用流程为ParseUtil.parse -> TikaParser.getParse -> OfficeParser.parse。