nutch1.12增加抓取ajax功能页面插件

原创 2016年08月29日 09:56:00

目前nutch有1.x和2.x两个版本,这两个版本并行更行。由于有人说2.x不成熟,问题较多,因此本人选用1.12.但是1.12不能抓取ajax渲染的页面,google上查到,1.8有个版本,有个大牛开发了抓取ajax功能的插件(https://github.com/xautlx/nutch-htmlunit),拿来用了下,安装后,发现有的页面有乱码,按这个方法解决了下,还是不行(http://blog.csdn.net/renyp8799/article/details/38331495)我看1.12上是正常的,因此决定把1.8的插件,移植到1.12上。

涉及到4个插件目录:

index-s2jh 基于apache nutch 1.8添加htmlunit ajax支持初始化
lib-htmlunit 增加htmlunit对https的支持
parse-s2jh Signed-off-by: lixia <xautlx@hotmail.com>
protocol-htmlunit 增加htmlunit对https的支持
把这四个目录对应的copy到1.12相应目录下。并对比1.8和1.12的ivy.xml文件中所加载的包,1.8下有几个包,1.12里没有,比如  <dependency org="net.sourceforge.htmlunit" name="htmlunit"  rev="2.16" conf="*->default" />,手动加好。并修改1.12下plugin目录中的build.xml文件增加这四项。
<ant dir="lib-htmlunit" target="deploy" />
  <ant dir="protocol-htmlunit" target="deploy" />
  <ant dir="parse-s2jh" target="deploy" />
  <ant dir="index-s2jh" target="deploy" />
然后ant编译。ok后抓取,ajax内容的页面没问题,但是又发现了乱码。

判断是抓取页面解析内容的时候出现的乱码,可是之前1.12抓同样的页面没有乱码,断定,肯定是那四个插件的某一个在解析的时候导致的。于是定位到src\plugin\protocol-htmlunit\src\java\org\apache\nutch\protocol\htmlunit\HttpResponse.java.发现有这么一段代码

        String charsetName = page.getPageEncoding();
        //去掉xml头部字符串
        pageAsXml = StringUtils.substringAfter(pageAsXml, "?>").trim();


        //System.out.println("URL: " + urlStr + ", CharsetName: " + charsetName + " , Page HTML=\n" + pageAsXml);
        if (Http.LOG.isTraceEnabled()) {
            Http.LOG.trace("URL: " + urlStr + ", CharsetName: " + charsetName + " , Page HTML=\n" + pageAsXml);
        }
        content = pageAsXml.getBytes(charsetName);


感觉是 String charsetName = page.getPageEncoding();导致的,于是打了日志。运行后发现,charsetName 并不是页面上的编码utf-8,而是iso8859-1,而 page.getPageEncoding();方法是com.gargoylesoftware.htmlunit包里的,查到源码,发现,page.getPageEncoding();有个默认值是iso8859-1,如果没取到页面的编码,则会默认这个值。至此问题清晰了。后面就是怎么取页面编码问题。我这边暂时写死成utf-8.


这是最近一周使用nutch的小总结,给自己留个记录,方便查阅,希望也能对其他遇到相同问题的人有帮助。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Nutch2.3系列教程——Nutch2.3编译

Nutch2的稳定版,Nutch2.3终于在2015年1月22日发布,官方所谓的Nutch2.x终于可以编译成功了。 下载地址:http://nutch.apache.org/downloads.h...
  • AJAXHu
  • AJAXHu
  • 2015-01-31 13:42
  • 2768

nutch-1.8爬虫网页中文乱码的处理

Nutch1.8在使用默认网页解析插件解析网页文本时,有些网页会出现在乱码问题。

Ubuntu12搭建nutch1.2+tomcat7+jdk1.6

Ubuntu12搭建nutch1.2+tomcat7+jdk1.6 所用软件:jdk-6u24-linux-i586.bin apache-tomcat-7.0.27.tar.gz apache-nu...

Nutch抓取插件-HTTPS协议支持

1 什么是HTTPS协议?HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP...

Nutch1.2增加插件例子

今尝试下给nutch1.2增加一个插件,于是到官网找了个例子,链接如下:http://wiki.apache.org/nutch/WritingPluginExample-0.9这个例子实现的的是推荐...

Jquery+Ajax+jquery.validate插件搞定完整的注册页面

一个完整的注册页面的jquery:$(document).ready(function(){ //省市区ajax请求 $("#province").c...

rails4使用bootstrap的模态框插件,结合ajax做出从弹出框选取内容返回给原页面的效果

rails4使用bootstrap的模态框插件,结合ajax做出从弹出框选取内容返回给原页面的效果。
  • beslow
  • beslow
  • 2014-06-08 23:30
  • 2265

nutch的查询结果页面search.jsp如何实现翻页功能

翻页功能其实很简单 就是在当前的查询结果的基础上,向下查询hitsPerPage个结果,但要注意因为search.jsp源码中,将每个站点的查询返回结果数hitsPerSite设置为2,所以翻页是会...

Gradle 1.12用户指南翻译——第三十三章. PMD 插件

第三十三章. PMD 插件 PMD 插件使用PMD对项目的 Java 源文件执行质量检查,并从检查结果中生成报告。 33.1. 用法 要使用 PMD 插件,请在构建脚本中包含以下语句: 示例 33...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)