基于Apache Nutch和Htmlunit的扩展实现AJAX页面爬虫抓取解析插件

EntDIY 发布于 2014/08/07 15:12
阅读 2K+
收藏 7

之前提供了一个版本,是直接把plugin形式的源码放到代码库,后来发现有不少人反馈说自己集成到apache nutch中编译或运行,遇到这那的问题。因此这次干脆基于Apache Nutch 1.8源码工程,把所有插件源码/依赖/运行参数等预置好,使大家能更简洁全面的使用这个插件。

http://www.oschina.net/p/nutch-htmlunit

http://git.oschina.net/xautlx/nutch-htmlunit

https://github.com/xautlx/nutch-htmlunit


Nutch Htmlunit Plugin

项目简介

基于Apache Nutch 1.8和Htmlunit组件,实现对于AJAX加载类型页面的完整页面内容抓取解析。

According to the implementation of Apache Nutch 1.8, we can't get dynamic HTML information from fetch pages including AJAX requests as it will ignore all AJAX requests.

This plugin will use Htmlunit to fetch whole page content with necessary dynamic AJAX requests. It developed and tested with Apache Nutch 1.8, you can try it on other Nutch version or refactor the source codes as your design.

主要特性

  • 常规的HTML页面抓取: 对于常规的例如新闻类没有AJAX特性的页面可以直接用Nutch自带的protocol-http插件抓取。

  • 常规的AJAX页面抓取: 对于绝大部分诸如jQuery ajax加载的页面,可以直接用protocol-htmlunit插件抓取。

  • 特殊的AJAX请求页面抓取: 诸如淘宝/天猫的页面采用了独特的Kissy Javascript组件, 导致htmlunit无法直接感知到需要等待Kissy发起的请求完成,通过等待页面加载解析内容判断处理实现此类页面数据抓取。

  • 基于页面滚动的AJAX请求页面抓取: 诸如淘宝/天猫的商品详情页面会基于页面滚动发起商品描述信息的加载, 通过protocol-htmlunit扩展处理可以实现此类页面数据抓取。

运行体验

由于Nutch运行是基于Unix/Linux环境的,请自行准备Unix/Linux系统或Cygwin运行环境。

git clone整个工程代码后,进行本地git下载目录:

cd nutch-htmlunit/runtime/local

bin/crawl urls crawl false 1

//urls参数为爬虫入库url文件目录; crawl为爬虫输出目录; false本应为solr索引url参数,此处设置为false不做solr索引处理; 1为爬虫执行回数

运行结束后可以看到天猫商品页面的价格/描述/滚动加载的图片等所有信息都已经完整获取到。

运行日志输入示例参考:http://git.oschina.net/xautlx/nutch-htmlunit/wikis/Log

扩展插件说明

  • protocol-htmlunit: 基于Htmlunit实现的AJAX页面Fetcher插件

  • parse-s2jh: 基于XPath解析页面元素内容; 基于数据库模式输出解析到结构化数据; 对于个别复杂类型AJAX页面定制判断页面加载完成的回调判断逻辑

  • index-s2jh: 追加设置需要额外传递给solr索引的属性数据; 设定不需要索引的页面规则;


加载中
0
waterz
waterz
虽然还没看实现,但感觉很不错,谢谢分享
0
yulin3
yulin3
代码导进来全是错的
熊猫2014
熊猫2014
@S2JH 能给个好用的s2jh吗
EntDIY
EntDIY
Apache Nutch工程代码采用Ivy进行依赖管理,再先参考官方文档熟悉官方源码工程编译运行过程后,再来获取本项目源码就理解其用法了。
0
是夜色太荒芜
是夜色太荒芜
大神 我用这个插件 抓去工商银行ajax的网站(http://www.icbc.com.cn/ICBCDynamicSite2/money/moneytabs.htm),职能抓去现金管理类的两个产品,其他的需要鼠标经过触发的mouseenter事件的产品,还是抓去不了啊。这和致用htmlUnit的效果一样呢。大神,能帮我看看吗?万分感谢啊。。方便的话,希望能加下您的qq.(me:737546268@qq.com).
是夜色太荒芜
是夜色太荒芜
回复 @S2JH : 大神,这个能抓取ajax请求的数据吗?
EntDIY
EntDIY
提示:当前版本项目停止更新,最新Apache Nutch 2.X版本实现请访问: http://git.oschina.net/xautlx/nutch-ajax
0
EntDIY
EntDIY

----------------------------------------------------------------------------------------------------------

提示:当前版本项目停止更新,最新Apache Nutch 2.X版本实现请访问:

http://git.oschina.net/xautlx/nutch-ajax

------------------------------------------------------------------------------------------------

是夜色太荒芜
是夜色太荒芜
大神 我是直接在http类的主方法中直接输入的网址http://www.icbc.com.cn/ICBCDynamicSite2/money/moneytabs.htm,运行结果和上一版那个一样啊,ajax的数据还是没抓取下来啊,是不是我这样运行方式不对啊。
是夜色太荒芜
是夜色太荒芜
大神 怎么项目导入eclipse以后,一直保持在ivyde resolve状态呢
返回顶部
顶部