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请求的动态网页相关推荐

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

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

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

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

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

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

  4. JAVA爬虫框架WebMagic爬取ajax请求的页面数据

    查看WebMagic文档:http://webmagic.io/docs/zh/posts/ch1-overview/ 爬取网址需要翻墙: https://www.reddit.com/r/funny ...

  5. 简单爬取微博评论详细解析,学习爬取ajax异步数据交换动态网页

    爬取微博评论详细解析,学习爬取ajax异步数据交换动态网页 1.什么是ajax异步数据交换网页 2.用到的工具模块和简单解释 3.网页内容解析 4.代码实现及解释 1.什么是ajax异步数据交换网页 ...

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

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

  7. 通过爬取天猫商品评论实例分析Python爬取ajax动态生成的数据

    本文主要通过爬取天猫商品kindle的评论为例来说明利用python爬取ajax动态生成的数据的方式,本文使用的工具如下: 工具 chrome浏览器[寻找评论的动态链接] python3.5[执行代码 ...

  8. scrapy由浅入深(三) selenium模拟爬取ajax动态页面(智联招聘)

    爬取智联招聘的网址:https://sou.zhaopin.com/?pageSize=60&jl=489&kw=python&kt=3 上一篇博客爬取了前程无忧的职位招聘信息 ...

  9. python爬取加密qq空间_使用python+selenium爬取qq空间好友动态

    使用python+selenium爬取qq空间好友动态 分析过程如下: 要想用selenium登陆qq空间,必须点击账号密码登陆按钮然后再填写账号密码登陆. 1.PNG 点击账号密码按钮后跳转到如下页 ...

最新文章

  1. Deformable 可变形的DETR
  2. 【数字信号处理】相关函数 ( 相关函数性质 | 相关函数共轭对称性质 | 实信号自相关函数偶对称 | 复信号自相关函数共轭对称 | 复信号互相关函数共轭对称 )
  3. 虚拟form 下载文件
  4. [iOS]应用内支付(内购)的个人开发过程及坑!
  5. Windows Hook(2)调用DLL函数
  6. macos -bash: yarn: command not found/-bash: cnpm: command not found
  7. Winform 导航菜单的方法
  8. Android自定义标题栏
  9. 利用IPC$空连接进行入侵及防范的方法
  10. 用 PHP-GTK2 做 Win32 GUI 程序
  11. vueh5调用摄像头拍照_HTML5调用摄像头实现拍照功能(兼容各大主流浏览器)
  12. 姿态估计1-05:FSA-Net(头部姿态估算)-训练测试数据制作-预处理代码讲解
  13. 「WAYZ维智」:全国最具价值的室内外混合定位感知网络 | 百万人学AI评选
  14. 码云的首次使用—将本地项目上传到码云
  15. 转:最好的300款免费软件
  16. 测向交叉定位matlab,一种基于角度信息的无源多站多目标测向交叉定位方法与流程...
  17. js实现文字霓虹灯效果
  18. React生命周期(经典)
  19. sybase安装步骤
  20. 实验2-4-5 简单实现x的n次方(10分)

热门文章

  1. 实践人生 —— 一个普通IT人的十年回顾(下)
  2. 轻松精通数据库管理之道——运维巡检系列
  3. ros与下位机通信常用的c++ boost串口应用
  4. 【UIKit】解决iOS7状态栏问题
  5. linux下挂载nas存储异常处理
  6. salt 基本组建之 grains,pillars(整理中)
  7. 表达不同与构建不同: 对计算机的唯一真正的要求 (TrustNo.1 ) -- 待修改!!!...
  8. 最前线|爱奇艺低调上线“好多视频”,短视频战场的主动防御
  9. m_Orchestrate learning system---十三、thinkphp的验证器支持多语言么
  10. Linux学习---Day02