基于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索引的属性数据; 设定不需要索引的页面规则;
欢迎关注作者其他项目:
S2JH - 基于SSH的企业Web应用开发框架
12306 Hunter - (功能已失效不可用,不过还可以当作Swing开发样列参考只用)Java Swing C/S版本12306订票助手,用处你懂的
目前nutch有1.x和2.x两个版本,这两个版本并行更行。由于有人说2.x不成熟,问题较多,因此本人选用1.12.但是1.12不能抓取ajax渲染的页面,google上查到,1.8有个版本,有个大牛开发了抓取ajax功能的插件(https://github.com/xautlx/nutch-htmlunit),拿来用了下,安装后,发现有的页面有乱码,按这个方法解决了下,还是不行(http://b
随着Web的发展,RIA越来越多,JavaScript和Complex AJAX Libraries给网络爬虫带来了极大的挑战,解析页面的时候需要模拟浏览器执行JavaScript才能获得需要的文本内容。 好在有一个Java开源项目HtmlUnit,它能模拟Firefox、IE、Chrome等浏览器,不但可以用来测试Web应用,还可以用来解析包含JS的页面以提取信息。 下面看看HtmlUn
使用HtmlUnit模拟浏览器执行JS来获取网页内容 yunshouhu import com.gargoylesoftware.htmlunit.BrowserVersion; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.*; import org.junit.
需求: 需要采集js渲染的页面,有些网站的页面是js渲染的 实现: 基于HtmlUnit实现: public static void getAjaxPage() throws Exception{ WebClient webClient = new WebClient(); webClient.setJavaScriptEnabled(true); webCli
杨尚川博客: http://yangshangchuan.iteye.com/ 开源爬虫框架各有什么优缺点:http://www.aboutyun.com/thread-15968-1-1.html#userconsent# 搭建Hadoop2.6+Hbase0.98.9+Nutch2.3环境: http://www.xinglongjian.com/index.php/
虽然还没看实现,但感觉很不错,谢谢分享######代码导进来全是错的######@S2JH 能给个好用的s2jh吗######Apache Nutch工程代码采用Ivy进行依赖管理,再先参考官方文档熟悉官方源码工程编译运行过程后,再来获取本项目源码就理解其用法了。######大神 我用这个插件 抓去工商银行ajax的网站(http://www.icbc.com.cn/ICBCDynamicSite
本文向大家介绍Nodejs实现爬虫抓取数据实例解析,包括了Nodejs实现爬虫抓取数据实例解析的使用技巧和注意事项,需要的朋友参考一下 开始之前请先确保自己安装了Node.js环境,如果没有安装,大家可以到呐喊教程下载安装。 1.在项目文件夹安装两个必须的依赖包 superagent 是一个轻量的,渐进式的ajax api,可读性好,学习曲线低,内部依赖nodejs原生的请求api,适用于node
主要内容:导入所需模块,拼接URL地址,向URL发送请求,保存为本地文件,函数式编程修改程序本节讲解第一个 Python 爬虫实战案例:抓取您想要的网页,并将其保存至本地计算机。 首先我们对要编写的爬虫程序进行简单地分析,该程序可分为以下三个部分: 拼接 url 地址 发送请求 将照片保存至本地 明确逻辑后,我们就可以正式编写爬虫程序了。 导入所需模块 本节内容使用 urllib 库来编写爬虫,下面导入程序所用模块: 拼接URL地址 定义 URL 变量,拼接 url 地址。代码如下所示:
本文向大家介绍基于C#实现网页爬虫,包括了基于C#实现网页爬虫的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了基于C#实现网页爬虫的详细代码,供大家参考,具体内容如下 HTTP请求工具类: 功能: 1、获取网页html 2、下载网络图片 多线程爬取网页代码: 截图: 以上就是本文的全部内容,希望对大家的学习有所帮助。
本文向大家介绍基于C#实现网络爬虫 C#抓取网页Html源码,包括了基于C#实现网络爬虫 C#抓取网页Html源码的使用技巧和注意事项,需要的朋友参考一下 最近刚完成一个简单的网络爬虫,开始的时候很迷茫,不知道如何入手,后来发现了很多的资料,不过真正能达到我需要,有用的资料--代码很难找。所以我想发这篇文章让一些要做这个功能的朋友少走一些弯路。 首先是抓取Html源码,并选择<ul class="
本文向大家介绍Java爬虫 信息抓取的实现,包括了Java爬虫 信息抓取的实现的使用技巧和注意事项,需要的朋友参考一下 今天公司有个需求,需要做一些指定网站查询后的数据的抓取,于是花了点时间写了个demo供演示使用。 思想很简单:就是通过Java访问的链接,然后拿到html字符串,然后就是解析链接等需要的数据。技术上使用Jsoup方便页面的解析,当然Jsoup很方便,也很简单,一行代码就能知道怎么
我尝试了几种等待JS脚本完成的方法,但都无济于事。点击按钮加载更多新闻或触发他们的事件似乎也没有帮助。 我的工作假设是,在JS脚本完成后,我不需要重新分配实例。对吗? 我也看到HTMLUnit的JS引擎在一些网站上不太好用。是这里的情况还是我只是漏掉了什么? 下面是我的代码: 还有,下面的警告是否相关?由于HtmlUnit生成大量的JS警告,我不确定哪些是重要的,哪些不重要。