利用开源插件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请求的动态网页相关推荐

  1. 用Python爬虫爬取澎湃新闻【动态网页:Ajax 动态请求、异步刷新生成数据】的搜索结果(附代码讲解与整套代码)

    一.准备工作 1.本段代码要用到Python中的selenium模块,需要提前进行加载.主要加载方式是在Python中的命令行中输入 pip install selenium. 注:当直接用 pip ...

  2. python爬取京东评论分析_Python爬取京东商品评价(动态网页的爬取)

    首先打开京东的任意几个商品页面,并观察URL,可以发现都是https://item.jd.com/+数字+.htm的格式,而且数字也随着商品的改变而改变,基本上可以确定这串数字是商品ID 之后我们找到 ...

  3. Python3 爬虫学习笔记 C03 【Ajax 数据爬取】

    Python3 爬虫学习笔记第三章 -- [Ajax 数据爬取] 文章目录 [3.1]Ajax 简介 [3.2]解析真实地址提取 [3.1]Ajax 简介 Ajax - Asynchronous Ja ...

  4. 【Python爬虫学习笔记12】Ajax数据爬取简介

    有时候在我们设计利用requests抓取网页数据的时候,会发现所获得的结果可能与浏览器显示给我们的不一样:比如说有的信息我们通过浏览器可以显示,但一旦用requests却得不到想要的结果.这种现象是因 ...

  5. python爬百度新闻_13、web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息...

    crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息, ...

  6. selenium爬取Ajax加载的网页(以微博为例)

    Tip:我写了一篇直接构造请求获取微博数据的文章,不使用selenium,直接访问url获取到json数据,然后解析即可得到想要的数据的文章,请参考微博博主动态及相册的请求构造规律 ========= ...

  7. Python爬虫爬取Ajax加载的百度图库

    Ajax 是一种用于创建快速动态网页的技术, 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. Ajax用一句话来说就是不需要刷整个新页面即可从服务器取得数据(局部刷新) 今天通过在百度 ...

  8. 《PYTHON3网络爬虫开发实践》——第六章 Ajax数据爬取

    第六章 Ajax数据爬取 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:这是因为requests 获取的都是原始的HTML文档,而浏览器中的页面则是经过Java ...

  9. python翻页功能url不变_爬取Ajax动态加载和翻页时url不变的网页

    这两天投了一家公司的爬虫实习生,笔试题是完成一个爬虫的小需求.网站没有什么反爬的高级技巧.但是有非常常见的,并不是针对我们爬虫的,却让我们新手很难理解的ajax动态加载技术和乍一看不明白的翻页时不变的 ...

  10. 简单爬虫Ajax数据爬取——今日头条图片爬取

    一.Ajax简介 什么是Ajax? Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页 ...

最新文章

  1. stm32f4 RAM中运行程序 读保护设置
  2. unslider调用配置选项
  3. word中图片超出页边距_如何在Word中更改页边距
  4. Java Integer类中的parseInt和valueOf的区别
  5. jquery 取值 数值_jQuery – 使用正则表达式获取数据值
  6. Alpha冲刺(2/10)——2019.4.24
  7. 【安卓笔记】—— 感知生命周期 Lifecycles
  8. 同时大量连接导致的DDOS攻击,导致收发器宕机,用户大面积超时掉线
  9. python中字典的索引_python字典索引
  10. C++ 类(继承中的构造和析构)
  11. 微分方程3_求解偏微分方程
  12. fps透视基础-3分钟快速定位矩阵基址-附3D坐标转屏幕坐标算法
  13. 【rmzt:杀个浠巴烂win7主题】
  14. 每日三省吾身- 持续改进-持续集成
  15. Anaconda 安装及使用
  16. 使用PHP环境一键安装包快速搭建PHP开发环境
  17. 基于DCT变换图像去噪算法的进一步优化(100W像素30ms)
  18. hashmap hash冲突怎么解决_10个HashMap问题搞定面试官
  19. 喜马拉雅一喜一忧:盈利水平好转,营收减档降速,继续上市进程
  20. 麻省理工免费在线课程首次可以获取学位

热门文章

  1. sip协议详解(三)
  2. php获取客户端ip地址
  3. 新版谷歌flash的问题
  4. TCP/IP报文头部整理
  5. 6.郝斌C语言笔记——流程控制
  6. App.config“配置系统未能初始化” 异常解决 C#
  7. 基于单片机的电机转速PID控制
  8. linux系统tcl电视刷机包,【欢视商店】TCL电视RT95系列升级包与刷机包
  9. matlab求边界点,MATLAB Delaunay算法提取离散点边界的方法
  10. DDOS防御流量清洗的解决方案,流量清洗服务有什么功能?