Htmlunit是一款模拟浏览抓取页面内容的Java框架,具有js解析引擎(rhino),可以解析页面的js脚本,得到完整的页面内容,特殊适合于这种非完整页面的站点抓取

 /**
      * 获取页面的TITLE、XML代码、文本
      */
     @Test
     public void connNet() throws Exception {
         String str;
         // 创建一个webclient
         WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);
         // htmlunit 对css和javascript的支持不好,所以请关闭之
         webClient.getOptions().setJavaScriptEnabled(false);
         webClient.getOptions().setCssEnabled(false);
         // 获取页面
         HtmlPage page = webClient.getPage("http://www.baidu.com/");
         // 获取页面的TITLE
         str = page.getTitleText();
         System.out.println(str);
         // 获取页面的XML代码
         str = page.asXml();
         System.out.println(str);
         // 获取页面的文本
         str = page.asText();
         System.out.println(str);
         // 关闭webclient
         webClient.closeAllWindows();
     }

     /**
      * 找到页面中特定的元素
      */
     @Test
     public void getInput() throws Exception {
         // 创建webclient
         WebClient webClient = new WebClient(BrowserVersion.CHROME);
         // htmlunit 对css和javascript的支持不好,所以请关闭之
         webClient.getOptions().setJavaScriptEnabled(false);
         webClient.getOptions().setCssEnabled(false);
         HtmlPage page = (HtmlPage) webClient.getPage("http://www.baidu.com/");
         // 通过id获得"百度一下"按钮
         HtmlInput btn = (HtmlInput) page.getHtmlElementById("su");
         System.out.println(btn.getDefaultValue());
         // 关闭webclient
         webClient.closeAllWindows();
     }

     /**
      * 元素检索
      */
     @Test
     public void search() throws Exception {
         // 创建webclient
         WebClient webClient = new WebClient(BrowserVersion.CHROME);
         // htmlunit 对css和javascript的支持不好,所以请关闭之
         webClient.getOptions().setJavaScriptEnabled(false);
         webClient.getOptions().setCssEnabled(false);
         HtmlPage page = (HtmlPage) webClient.getPage("http://www.baidu.com/");
         // 查找所有div
         List<?> hbList = page.getByXPath("//div");
         HtmlDivision hb = (HtmlDivision) hbList.get(0);
         System.out.println(hb.toString());
         // 查找并获取特定input
         List<?> inputList = page.getByXPath("//input[@id='su']");
         HtmlInput input = (HtmlInput) inputList.get(0);
         System.out.println(input.toString());
         // 关闭webclient
         webClient.closeAllWindows();
     }

     /**
      * 提交搜索
      */
     @Test
     public void submitForm() throws Exception {
         // 创建webclient
         WebClient webClient = new WebClient(BrowserVersion.CHROME);
         // htmlunit 对css和javascript的支持不好,所以请关闭之
         webClient.getOptions().setJavaScriptEnabled(false);
         webClient.getOptions().setCssEnabled(false);
         HtmlPage page = (HtmlPage) webClient.getPage("http://www.baidu.com/");
         // 获取搜索输入框并提交搜索内容
         HtmlInput input = (HtmlInput) page.getHtmlElementById("kw");
         System.out.println(input.toString());
         input.setValueAttribute("博客园");
         System.out.println(input.toString());
         // 获取搜索按钮并点击
         HtmlInput btn = (HtmlInput) page.getHtmlElementById("su");
         HtmlPage page2 = btn.click();
         // 输出新页面的文本
         System.out.println(page2.asText());
     }

htmlUtil 网页爬取工具的更多相关文章

  1. HtmlParse:一款超轻量级的HTML文件解析和爬取工具

    HtmlParse 是一款基于windwos平台的HTML文档解析工具,可快速构建DOM树,从而轻松实现网页元素的爬取工作.DOM树就是一个HTML文档的节点树,每个节点由:标签(Tag).属性(At ...

  2. 使用urllib进行网页爬取

    # coding=gbk # 抓取开奖号码 # url:http://datachart.500.com/dlt/zoushi/jbzs_foreback.shtml ''' 对网页逐行迭代,找到目标 ...

  3. WebFetch 是无依赖极简网页爬取组件

    WebFetch 是无依赖极简网页爬取组件,能在移动设备上运行的微型爬虫. WebFetch 要达到的目标: 没有第三方依赖jar包 减少内存使用 提高CPU利用率 加快网络爬取速度 简洁明了的api ...

  4. 动态网页爬取例子(WebCollector+selenium+phantomjs)

    目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test" ...

  5. Python和BeautifulSoup进行网页爬取

    在大数据.人工智能时代,我们通常需要从网站中收集我们所需的数据,网络信息的爬取技术已经成为多个行业所需的技能之一.而Python则是目前数据科学项目中最常用的编程语言之一.使用Python与Beaut ...

  6. Node.js 动态网页爬取 PhantomJS 使用入门(转)

    Node.js 动态网页爬取 PhantomJS 使用入门 原创NeverSettle101 发布于2017-03-24 09:34:45 阅读数 8309  收藏 展开 版权声明:本文为 winte ...

  7. Java开源网页抓取工具httpClient以及jsoup

    网上看到不错的Java网页抓取工具和库 先记录一下 使用java开源工具httpClient及jsoup抓取解析网页数据

  8. 爬虫入门(三)——动态网页爬取:爬取pexel上的图片

    Pexel上有大量精美的图片,没事总想看看有什么好看的自己保存到电脑里可能会很有用 但是一个一个保存当然太麻烦了 所以不如我们写个爬虫吧(๑•̀ㅂ•́)و✧ 一开始学习爬虫的时候希望爬取pexel上的 ...

  9. 【Python开发】网页爬取心得

    转载:python 爬虫抓取心得分享 title:python 爬虫抓取心得分享 0x1.urllib.quote('要编码的字符串')如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以 ...

随机推荐

  1. 配置国内PIP源方法

    python开发者都知道,当我们pip install安装扩展库的时候,经常遇到安装失败(超时)等,有时候是因为国外镜像被屏蔽了,带来不少麻烦, 随着国内python开发的增多,越来越多企业都开放了自 ...

  2. Vuejs实例-00Vuejs2.0全家桶结合ELementUI制作后台管理系统

    Vuejs2.0全家桶结合ELementUI制作后台管理系统 0: 系统环境的介绍 1: Vuejs实例-01使用vue-cli脚手架搭建Vue.js项目 2: Vuejs实例-02Vue.js项目集 ...

  3. 引导图滤波(Guided Image Filtering)原理以及OpenCV实现

    引导图是一种自适应权重滤波器,能够在平滑图像的同时起到保持边界的作用,具体公式推导请查阅原文献<Guided Image Filtering>.这里只说一下自适应权重原理.C++实现灰度图 ...

  4. shell实例练习+详解

    想着将Shell与Python和Java等脚本比较比较,当一有这个念头我就放弃了.这太侮辱Shell了.(哭笑脸!) 作为一个程序员,Linux那是最基本要求.而shell脚本有时候也会显示它在Lin ...

  5. React源码解析:setState

    先来几个例子热热身: ......... constructor(props){ super(props); this.state = { index: 0 } } componentDidMount ...

  6. 顺序一致性内存模型与JMM的“顺序一致性”

    顺序一致性内存模型是一个被计算机科学家理想化了的理论参考模型,它为程序员提供了极强的内存可见性保证.顺序一致性内存模型有两大特性.1)一个线程中的所有操作必须按照程序的顺序来执行.2)(不管程序是否同 ...

  7. u8g2库的相关资料

    2017-12-1309:13:32更新51论坛上的帖子,大神自己写的库文件,待调试! http://www.51hei.com/bbs/forum.php?mod=viewthread&ti ...

  8. JMeter之断言 - 响应文本

    1.  响应数据: 2.  添加响应断言: 3.设置响应断言,本例中 设置 响应文本 中 包括 success 字符串的 为真,即通过. 4.如果设置 响应文本 中 包括 error 字符串的 为真, ...

  9. 【视频编解码·学习笔记】4. H.264的码流封装格式

    一.码流封装格式简单介绍: H.264的语法元素进行编码后,生成的输出数据都封装为NAL Unit进行传递,多个NAL Unit的数据组合在一起形成总的输出码流.对于不同的应用场景,NAL规定了一种通 ...

  10. HH的项链

    传送门 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链变得越 ...