Nutch爬取Ajax请求的动态网页
2019独角兽企业重金招聘Python工程师标准>>>
利用开源插件html-unit
https://github.com/xautlx/nutch-htmlunit
把插件倒入到nutch环境中
但是在执行过程中,会出现各种错误。原因是lib-htmlunit的HttpWebClient有问题,
作了如下修改:
package org.apache.nutch.protocol.htmlunit;
import org.apache.hadoop.conf.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.URL;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlInput;
import com.gargoylesoftware.htmlunit.WebRequest;
import com.gargoylesoftware.htmlunit.AjaxController;
import com.gargoylesoftware.htmlunit.BrowserVersion;
/**
* Htmlunit WebClient Helper
* Use one WebClient instance per thread by ThreadLocal to support multiple threads execution
*/
public class HttpWebClient {
private static final Logger LOG = LoggerFactory.getLogger("org.apache.nutch.protocol");
private static ThreadLocal<WebClient> threadWebClient = new ThreadLocal<WebClient>();
public static HtmlPage getHtmlPage(String url, Configuration conf) {
try {
WebClient webClient = threadWebClient.get();
if (webClient == null) {
LOG.info("Initing web client for thread: {}", Thread.currentThread().getId());
AjaxController ajaxController = new NicelyResynchronizingAjaxController();
webClient = new WebClient(BrowserVersion.FIREFOX_17);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.setAjaxController(ajaxController);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setPrintContentOnFailingStatusCode(false);
webClient.getOptions().setRedirectEnabled(true);
webClient.getOptions().setPopupBlockerEnabled(true);
webClient.setCache(new ExtHtmlunitCache());
// Enhanced WebConnection based on urlfilter
//百度云盘基本都是Ajax实现的,提供了账号密码方式
HtmlPage loginPage = webClient.getPage("http://yun.baidu.com");
loginPage.getElementById("TANGRAM__PSP_4__userName").setAttribute("value","280889189");
loginPage.getElementById("TANGRAM__PSP_4__password").setAttribute("value","123578951");
loginPage = ((HtmlInput)loginPage.getElementById("TANGRAM__PSP_4__submit")).click();
webClient.setWebConnection(new RegexHttpWebConnection(webClient,conf));
threadWebClient.set(webClient);
}
HtmlPage page = webClient.getPage(url);
// webClient.closeAllWindows();
return page;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static HtmlPage getHtmlPage(String url) {
return getHtmlPage(url, null);
}
}
转载于:https://my.oschina.net/junfrank/blog/288033
Nutch爬取Ajax请求的动态网页相关推荐
- selenium爬取Ajax加载的网页(以微博为例)
Tip:我写了一篇直接构造请求获取微博数据的文章,不使用selenium,直接访问url获取到json数据,然后解析即可得到想要的数据的文章,请参考微博博主动态及相册的请求构造规律 ========= ...
- 用Python爬虫爬取澎湃新闻【动态网页:Ajax 动态请求、异步刷新生成数据】的搜索结果(附代码讲解与整套代码)
一.准备工作 1.本段代码要用到Python中的selenium模块,需要提前进行加载.主要加载方式是在Python中的命令行中输入 pip install selenium. 注:当直接用 pip ...
- python爬取京东评论分析_Python爬取京东商品评价(动态网页的爬取)
首先打开京东的任意几个商品页面,并观察URL,可以发现都是https://item.jd.com/+数字+.htm的格式,而且数字也随着商品的改变而改变,基本上可以确定这串数字是商品ID 之后我们找到 ...
- JAVA爬虫框架WebMagic爬取ajax请求的页面数据
查看WebMagic文档:http://webmagic.io/docs/zh/posts/ch1-overview/ 爬取网址需要翻墙: https://www.reddit.com/r/funny ...
- 简单爬取微博评论详细解析,学习爬取ajax异步数据交换动态网页
爬取微博评论详细解析,学习爬取ajax异步数据交换动态网页 1.什么是ajax异步数据交换网页 2.用到的工具模块和简单解释 3.网页内容解析 4.代码实现及解释 1.什么是ajax异步数据交换网页 ...
- python爬百度新闻_13、web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息...
crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息, ...
- 通过爬取天猫商品评论实例分析Python爬取ajax动态生成的数据
本文主要通过爬取天猫商品kindle的评论为例来说明利用python爬取ajax动态生成的数据的方式,本文使用的工具如下: 工具 chrome浏览器[寻找评论的动态链接] python3.5[执行代码 ...
- scrapy由浅入深(三) selenium模拟爬取ajax动态页面(智联招聘)
爬取智联招聘的网址:https://sou.zhaopin.com/?pageSize=60&jl=489&kw=python&kt=3 上一篇博客爬取了前程无忧的职位招聘信息 ...
- python爬取加密qq空间_使用python+selenium爬取qq空间好友动态
使用python+selenium爬取qq空间好友动态 分析过程如下: 要想用selenium登陆qq空间,必须点击账号密码登陆按钮然后再填写账号密码登陆. 1.PNG 点击账号密码按钮后跳转到如下页 ...
最新文章
- Deformable 可变形的DETR
- 【数字信号处理】相关函数 ( 相关函数性质 | 相关函数共轭对称性质 | 实信号自相关函数偶对称 | 复信号自相关函数共轭对称 | 复信号互相关函数共轭对称 )
- 虚拟form 下载文件
- [iOS]应用内支付(内购)的个人开发过程及坑!
- Windows Hook(2)调用DLL函数
- macos -bash: yarn: command not found/-bash: cnpm: command not found
- Winform 导航菜单的方法
- Android自定义标题栏
- 利用IPC$空连接进行入侵及防范的方法
- 用 PHP-GTK2 做 Win32 GUI 程序
- vueh5调用摄像头拍照_HTML5调用摄像头实现拍照功能(兼容各大主流浏览器)
- 姿态估计1-05:FSA-Net(头部姿态估算)-训练测试数据制作-预处理代码讲解
- 「WAYZ维智」:全国最具价值的室内外混合定位感知网络 | 百万人学AI评选
- 码云的首次使用—将本地项目上传到码云
- 转:最好的300款免费软件
- 测向交叉定位matlab,一种基于角度信息的无源多站多目标测向交叉定位方法与流程...
- js实现文字霓虹灯效果
- React生命周期(经典)
- sybase安装步骤
- 实验2-4-5 简单实现x的n次方(10分)
热门文章
- 实践人生 —— 一个普通IT人的十年回顾(下)
- 轻松精通数据库管理之道——运维巡检系列
- ros与下位机通信常用的c++ boost串口应用
- 【UIKit】解决iOS7状态栏问题
- linux下挂载nas存储异常处理
- salt 基本组建之 grains,pillars(整理中)
- 表达不同与构建不同: 对计算机的唯一真正的要求 (TrustNo.1 ) -- 待修改!!!...
- 最前线|爱奇艺低调上线“好多视频”,短视频战场的主动防御
- m_Orchestrate learning system---十三、thinkphp的验证器支持多语言么
- Linux学习---Day02