nutch ajax mysql_Nutch爬取Ajax请求的动态网页
利用开源插件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 threadWebClient = new ThreadLocal();
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);
}
}
nutch ajax mysql_Nutch爬取Ajax请求的动态网页相关推荐
- 用Python爬虫爬取澎湃新闻【动态网页:Ajax 动态请求、异步刷新生成数据】的搜索结果(附代码讲解与整套代码)
一.准备工作 1.本段代码要用到Python中的selenium模块,需要提前进行加载.主要加载方式是在Python中的命令行中输入 pip install selenium. 注:当直接用 pip ...
- python爬取京东评论分析_Python爬取京东商品评价(动态网页的爬取)
首先打开京东的任意几个商品页面,并观察URL,可以发现都是https://item.jd.com/+数字+.htm的格式,而且数字也随着商品的改变而改变,基本上可以确定这串数字是商品ID 之后我们找到 ...
- Python3 爬虫学习笔记 C03 【Ajax 数据爬取】
Python3 爬虫学习笔记第三章 -- [Ajax 数据爬取] 文章目录 [3.1]Ajax 简介 [3.2]解析真实地址提取 [3.1]Ajax 简介 Ajax - Asynchronous Ja ...
- 【Python爬虫学习笔记12】Ajax数据爬取简介
有时候在我们设计利用requests抓取网页数据的时候,会发现所获得的结果可能与浏览器显示给我们的不一样:比如说有的信息我们通过浏览器可以显示,但一旦用requests却得不到想要的结果.这种现象是因 ...
- python爬百度新闻_13、web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息...
crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息, ...
- selenium爬取Ajax加载的网页(以微博为例)
Tip:我写了一篇直接构造请求获取微博数据的文章,不使用selenium,直接访问url获取到json数据,然后解析即可得到想要的数据的文章,请参考微博博主动态及相册的请求构造规律 ========= ...
- Python爬虫爬取Ajax加载的百度图库
Ajax 是一种用于创建快速动态网页的技术, 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. Ajax用一句话来说就是不需要刷整个新页面即可从服务器取得数据(局部刷新) 今天通过在百度 ...
- 《PYTHON3网络爬虫开发实践》——第六章 Ajax数据爬取
第六章 Ajax数据爬取 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:这是因为requests 获取的都是原始的HTML文档,而浏览器中的页面则是经过Java ...
- python翻页功能url不变_爬取Ajax动态加载和翻页时url不变的网页
这两天投了一家公司的爬虫实习生,笔试题是完成一个爬虫的小需求.网站没有什么反爬的高级技巧.但是有非常常见的,并不是针对我们爬虫的,却让我们新手很难理解的ajax动态加载技术和乍一看不明白的翻页时不变的 ...
- 简单爬虫Ajax数据爬取——今日头条图片爬取
一.Ajax简介 什么是Ajax? Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页 ...
最新文章
- stm32f4 RAM中运行程序 读保护设置
- unslider调用配置选项
- word中图片超出页边距_如何在Word中更改页边距
- Java Integer类中的parseInt和valueOf的区别
- jquery 取值 数值_jQuery – 使用正则表达式获取数据值
- Alpha冲刺(2/10)——2019.4.24
- 【安卓笔记】—— 感知生命周期 Lifecycles
- 同时大量连接导致的DDOS攻击,导致收发器宕机,用户大面积超时掉线
- python中字典的索引_python字典索引
- C++ 类(继承中的构造和析构)
- 微分方程3_求解偏微分方程
- fps透视基础-3分钟快速定位矩阵基址-附3D坐标转屏幕坐标算法
- 【rmzt:杀个浠巴烂win7主题】
- 每日三省吾身- 持续改进-持续集成
- Anaconda 安装及使用
- 使用PHP环境一键安装包快速搭建PHP开发环境
- 基于DCT变换图像去噪算法的进一步优化(100W像素30ms)
- hashmap hash冲突怎么解决_10个HashMap问题搞定面试官
- 喜马拉雅一喜一忧:盈利水平好转,营收减档降速,继续上市进程
- 麻省理工免费在线课程首次可以获取学位