heritrix3.1自定义ExtractorHTML

2017-10-31  本文已影响0人  ZaneInTheSun

最近应需求使用heritrix3.1来爬取网络资源,感觉网上关于heritrix3.1还是很少,也可能是我没有找到。在这里呢想分享一下,关于url提取内容,我遇到的问题呢,种子url是一个ajax的请求地址,返回的json数据,heritrix将返回当做html来处理了,所以重写了ExtractorHTML来解析json来获取想要的uri。

原ExtractorHTML位置
package org.archive.modules.extractor;
将ExtractorHTML复制出一份修改extract方法如下:

void extract(CrawlURI curi, CharSequence cs) {
        Matcher tags = TextUtils.getMatcher("<a target=\"_blank\" uigs=\"account_name_0\" href=\"(.+?)\"",cs);
        String uri = curi.getURI();
        /***********************************************************/
        while(tags.find()){
            String group = tags.group(1);
            if(group!=null) {
                try {
                    Link.addRelativeToBase(curi, 6000, group, new SimpleLinkContext("=JS_MISC"), Hop.SPECULATIVE);
                    break;
                } catch (URIException e) {
                    e.printStackTrace();
                }
            }
        }
        /***********************************************************/
        TextUtils.recycleMatcher(tags);
    }

接下来就要修改配置文件了,crawler-beans.cxml
将原extractorHttp的位置前设置自定义的
customExtractorHTML

 <bean id="customExtractorHTML" class="org.test.extractor.SougouExtractorHTML">
 </bean>
 <bean id="extractorHttp" class="org.archive.modules.extractor.ExtractorHTTP">
 </bean>

并将<bean id="fetchProcessors" class="org.archive.modules.FetchChain">中原extractorHttp更换成自定义的customExtractorHTML

<!-- ...extract outlinks from HTML content... -->
    <ref bean="sougouExtractorHTML"/>
    <!-- ...extract outlinks from CSS content... -->
    <ref bean="extractorCss"/>
    <!-- ...extract outlinks from Javascript content... -->
    <ref bean="extractorJs"/>
    <!-- ...extract outlinks from Flash content... -->
    <ref bean="extractorSwf"/>

那么接下来这个Job就会走我们自定义的ExtractorHttp了。

以上是我自己的一些改动,若有更好的办法望指教。

上一篇下一篇

猜你喜欢

热点阅读