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.1 新闻分类爬虫(借鉴)

Contents 项目介绍配置文件本地抓取分布式环境配置开发环境配置solr 4.10.3配置hadoop2.5.2安装部署项目下载地址联系作者 项目介绍 本项目基于https://...
  • gywtzh0889
  • gywtzh0889
  • 2017年01月05日 16:17
  • 1473

Nutch2.3.1 新闻分类爬虫

分布式环境配置 solr 4.10.3配置 hadoop2.5.2安装部署 Nutch2.3.1 新闻分类 主题爬虫 新闻爬虫...
  • lqleo323
  • lqleo323
  • 2016年03月23日 16:21
  • 4545

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
  • 2971

开发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?这里按照我的经验随便扯淡一下:上面说的爬虫,基本可以分3类

1.分布式爬虫:Nutch 2.JAVA单机爬虫:Crawler4j、WebMagic、WebCollector 3. 非JAVA单机爬虫:scrapy 第一...
  • D_J_W
  • D_J_W
  • 2016年05月31日 09:50
  • 5123

使用Ajax抓取远程网页源代码并抓取其中图片【老司机不须再用】

抓取输入框中的URL的源代码,并从源代码中抓取其中的所有图片或视频地址。该工具帮助你快速获取你想要的图片或视频资源。...
  • HelloWorld_In_Java
  • HelloWorld_In_Java
  • 2017年05月17日 20:43
  • 570

Scrapy实战之抓取ajax网站

目标网站为http://www.ccgp-hubei.gov.cn,经检查HTML代码发现这个网页有一个iframe,iframe里面的内容才是网站的真正有用的内容,所以第一步是要先找到真正的URL。...
  • Q_AN1314
  • Q_AN1314
  • 2016年04月13日 12:27
  • 4348

获取ajax动态加载的页面

最近在因为工作需要,开始学习爬虫,对于静态加载的页面,爬去并不难,但是遇到ajax动态加载的页面,就爬去不到动态加载的信息了! 对于ajax动态加载的数据爬去,一般有两种方式: 1.因为js渲...
  • a812919698
  • a812919698
  • 2016年08月18日 17:27
  • 7211

Ecshop ajax 局部刷新购物车功能

1、比如我们category.dwt 里有 {insert name='cart_info'} 添加购物车 我们现在需要实现点击按钮后页面不刷新去更新上面购物车数量    2、首先我...
  • xllily_11
  • xllily_11
  • 2015年07月14日 11:51
  • 1678

ajax提交新增方法

我的工作日志2017-05-23
  • zhongyouda
  • zhongyouda
  • 2017年05月23日 21:59
  • 379
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nutch1.12增加抓取ajax功能页面插件
举报原因:
原因补充:

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