htmlunit爬虫工具使用--模拟浏览器发送请求,获取JS动态生成的页面内容
Htmlunit是一款模拟浏览抓取页面内容的java框架,具有js解析引擎(rhino),可以解析页面的js脚本,得到完整的页面内容,特殊适合于这种非完整页面的站点抓取。
下载地址:
https://sourceforge.net/projects/htmlunit/files/htmlunit/
maven地址:
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.18</version>
</dependency>
代码的实现非常简单,主要分为两种常用场景:
- 解析页面的js
- 不解析页面的js
package cn.qlq.craw.httpunit; import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
/**
* httpunit爬虫
* @author liqiang
*
*/
public class HttpUnitCraw { public static void main(String[] args) throws Exception {
HttpUnitCraw crawl = new HttpUnitCraw();
String url = "http://qiaoliqiang.cn/";
System.out.println("----------------------抓取页面时不解析js-----------------");
crawl.crawlPageWithoutAnalyseJs(url);
System.out.println("----------------------抓取页面时解析js-------------------");
crawl.crawlPageWithAnalyseJs(url);
} /**
* 功能描述:抓取页面时不解析页面的js
* @param url
* @throws Exception
*/
public void crawlPageWithoutAnalyseJs(String url) throws Exception{
//1.创建连接client
WebClient webClient = new WebClient(BrowserVersion.CHROME);
//2.设置连接的相关选项
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setTimeout(10000);
//3.抓取页面
HtmlPage page = webClient.getPage(url);
System.out.println(page.asXml());
//4.关闭模拟窗口
webClient.closeAllWindows();
} /**
* 功能描述:抓取页面时并解析页面的js
* @param url
* @throws Exception
*/
public void crawlPageWithAnalyseJs(String url) throws Exception{
//1.创建连接client
WebClient webClient = new WebClient(BrowserVersion.CHROME);
//2.设置连接的相关选项
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true); //需要解析js
webClient.getOptions().setThrowExceptionOnScriptError(false); //解析js出错时不抛异常
webClient.getOptions().setTimeout(10000); //超时时间 ms
//3.抓取页面
HtmlPage page = webClient.getPage(url);
//4.将页面转成指定格式
webClient.waitForBackgroundJavaScript(10000); //等侍js脚本执行完成
System.out.println(page.asXml());
//5.关闭模拟的窗口
webClient.closeAllWindows();
}
}
htmlunit爬虫工具使用--模拟浏览器发送请求,获取JS动态生成的页面内容的更多相关文章
- 使用HttpClient配置代理服务器模拟浏览器发送请求调用接口测试
在调用公司的某个接口时,直接通过浏览器配置代理服务器可以请求到如下数据: 请求url地址:http://wwwnei.xuebusi.com/rd-interface/getsales.jsp?cid ...
- 20200726_java爬虫_使用HttpClient模拟浏览器发送请求
浏览器获取数据: 打开浏览器 ==> 输入网址 ==> 回车查询 ==> 返回结果 ==> 浏览器显示结果数据 HttpClient获取数据: 创建HttpClient ==& ...
- telnet客户端模拟浏览器发送请求
telnet 客户端 telnet客户端能够发出请求去连接服务器(模拟浏览器) 使用telnet之前,需要开启telnet客户端 1.进入控制面板 2.进入程序和功能,选择打开或关闭windows功能 ...
- Java基础教程——模拟浏览器发送请求
JAVA访问网页 分别测试使用get和post方法访问网页,可以收到服务器的请求,并写入到html文件中. import java.io.*; import java.net.*; import ja ...
- HtmlUnit爬取Ajax动态生成的页面内容
HtmlUnit说白了就是一个浏览器,这个浏览器是用Java写的无界面的浏览器,正因为其没有界面,因此执行的速度还是可以滴. HtmlUnit提供了一系列的API,这些API可以干的功能比较多,如表单 ...
- java模拟浏览器发送请求
package test; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOExcep ...
- JAVA--利用HttpClient模拟浏览器登陆请求获取响应的Cookie
在通过java采集网页数据时,我们常常会遇到这样的问题: 站点需要登陆才能访问 而这种网站,一般都会对请求进行账号密码的验证,验证的方式也有多种,需要具体分析. 今天分析其中的一种情况: 站点对登陆密 ...
- php使用curl模拟多线程发送请求
每个PHP文件的执行是单线程的,但是php本身也可以用一些别的技术实现多线程并发比如用php-fpm进程,这里用curl模拟多线程发送请求.php的curl多线程是通过不断调用curl_multi_e ...
- httpClient模拟浏览器发请求
一.介绍 httpClient是Apache公司的一个子项目, 用来提高高效的.最新的.功能丰富的支持http协议的客户端编程工具包.完成可以模拟浏览器发起请求行为. 二.简单使用例子 : 模拟浏览器 ...
随机推荐
- Java JVM- jstat查看jvm的GC情况[转]
ava通过jvm自己管理内存,同时Java提供了一些命令行工具,用于查看内存使用情况.这里主要介绍一下jstat.jmap命令以及相关工具. 一.jstat查看 gc实时执行情况 jstat命令命令格 ...
- 关于setInterval()定时
最近项目中,遇到个需求就是获取停车场剩余车位数量,想是通过ajax定时抓取接口数据来实现(本想通过SignalR),但是项目本身直供少数人使用,感觉定时ajax可以满足 下面上代码 var handl ...
- C++解析(29):类型识别
0.目录 1.类型识别 2.动态类型识别 3.类型识别关键字 4.小结 1.类型识别 在面向对象中可能出现下面的情况: 基类指针指向子类对象 基类引用成为子类对象的别名 静态类型--变量(对象)自身的 ...
- OSPF协议介绍及配置 (下)
4.特殊区域详解 为了让我们的讲解更加的通俗易懂,我们看上面这个拓扑,这是一个根据客户业务逻辑结构所涉及的OSPF网络,共有三个区域(实际上远远不止),骨干区域area0为一级行及二级行所部署,*** ...
- 【MVVM 原生】原生MVVM的使用
一.前言 前些天需要完成一个任务,该任务属于公司的一些核心代码,为了避免不必要的麻烦,任务要求不能使用第三方的MVVM框架,必须用原生的. 平时习惯了Dev与MVVMLight,遇上原生的 ...
- 在C++程序中开启和禁用Windows设备的无线网卡的方法
原文链接地址:https://www.jb51.net/article/81340.htm 1.列出当前网卡:SetupDiEnumDeviceInfo 2.找出当前无线网卡的名字(用natvie w ...
- Redis的String、Hash类型命令
String是最简单的类型,一个Key对应一个Value,string类型是二进制安全的.Redis的string可以包含任何数据,比如jpg图片或者序列化的对象.最大上限是1G字节. Hash ...
- 安装cacti监控系统
1 安装snmp [root@xxxx ~]# yum -y install net-snmp* 2 安装rddtool 3 创建数据库 cacti, 导入 cd xx/cacti/cacti.sql ...
- Asp.Net保存session的三种方法 (Dll文件更新导致session丢失的解决办法)
1. InProc模式(默认值):asp.net将session保存到当前进程中,这种方式最快,但是不能多台服务器共享session,且会话状态数据容易丢失. <sessionState mod ...
- git用户名和邮箱配置
1. 设置全局用户名和邮箱 git config --global user.name "xxx" git config --global user.email "xxx ...