htmlunit抓取动态网页(模拟运行1.HTMLUNIT的基本功能分析工具展示 )

优采云 发布时间: 2022-02-18 07:15

  htmlunit抓取动态网页(模拟运行1.HTMLUNIT的基本功能分析工具展示

)

  HTML单元

  htmlunit 是一个开源的java页面分析工具。阅读完页面后,可以有效地使用htmlunit分析页面上的内容。该项目可以模拟浏览器的操作,称为java浏览器的开源实现。它是一个没有快速运行界面的浏览器。它是junit的扩展之一,使用Rhinojs引擎。模拟js运行

  1. HTMLUNIT的基本功能展示

  首先我们新建一个Maven普通客户端项目,然后打开pom.xml

  引入 htmlunit 支持:

  1

2 net.sourceforge.htmlunit

3 htmlunit

4 2.26

5

6

7

  然后我们写一个测试类来解析获取网页html和网页文本,和httpClient类似,但是底层执行过程默认是js执行过程(当然htmlunit提供了关闭js解析的设置);

  1import java.io.IOException;

2import java.net.MalformedURLException;

3

4import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;

5import com.gargoylesoftware.htmlunit.WebClient;

6import com.gargoylesoftware.htmlunit.html.HtmlPage;

7

8public class HtmlUnitTest {

9

10 public static void main(String[] args) {

11 WebClient webClient=new WebClient(); // 实例化Web客户端

12 try {

13 HtmlPage page=webClient.getPage("http://www.baidu.com"); // 解析获取页面

14 System.out.println("网页html:"+page.asXml()); // 获取Html

15 System.out.println("====================");

16 System.out.println("网页文本:"+page.asText()); // 获取文本

17 } catch (FailingHttpStatusCodeException e) {

18 // TODO Auto-generated catch block

19 e.printStackTrace();

20 } catch (MalformedURLException e) {

21 // TODO Auto-generated catch block

22 e.printStackTrace();

23 } catch (IOException e) {

24 // TODO Auto-generated catch block

25 e.printStackTrace();

26 }finally{

27 webClient.close(); // 关闭客户端,释放内存

28 }

29 }

30}

31

32

  我们之前的测试代码是直接请求,有的网站服务器防火墙会直接拒绝访问。

  我们现在使用htmlunit来模拟浏览器请求;主要是添加一些头信息;

  这是我们用火狐调试工具看到的请求头中的属性,当然上面还有返回的头信息;

  我们使用htmlunit来模拟浏览器执行,内置可以模拟IE、Firefox、Google;

  WebClient构造函数中有一个重载方法,可以添加指定的版本属性;

  完整代码:

  1import java.io.IOException;

2import java.net.MalformedURLException;

3

4import com.gargoylesoftware.htmlunit.BrowserVersion;

5import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;

6import com.gargoylesoftware.htmlunit.WebClient;

7import com.gargoylesoftware.htmlunit.html.HtmlPage;

8

9public class HtmlUnitTest {

10

11 public static void main(String[] args) {

12 WebClient webClient=new WebClient(BrowserVersion.FIREFOX_52); // 实例化Web客户端

13 try {

14 HtmlPage page=webClient.getPage("http://www.java1234.com"); // 解析获取页面

15 System.out.println("网页html:"+page.asXml()); // 获取Html

16 System.out.println("====================");

17 System.out.println("网页文本:"+page.asText()); // 获取文本

18 } catch (FailingHttpStatusCodeException e) {

19 // TODO Auto-generated catch block

20 e.printStackTrace();

21 } catch (MalformedURLException e) {

22 // TODO Auto-generated catch block

23 e.printStackTrace();

24 } catch (IOException e) {

25 // TODO Auto-generated catch block

26 e.printStackTrace();

27 }finally{

28 webClient.close(); // 关闭客户端,释放内存

29 }

30 }

31}

32

33

  htmlunit提供了丰富的api来获取指定元素jsoup,有些htmlunit也有;

  这里我们举一个例子:

<p>1import java.io.IOException;

2import java.net.MalformedURLException;

3

4import com.gargoylesoftware.htmlunit.BrowserVersion;

5import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;

6import com.gargoylesoftware.htmlunit.WebClient;

7import com.gargoylesoftware.htmlunit.html.DomElement;

8import com.gargoylesoftware.htmlunit.html.DomNodeList;

9import com.gargoylesoftware.htmlunit.html.HtmlDivision;

10import com.gargoylesoftware.htmlunit.html.HtmlListItem;

11import com.gargoylesoftware.htmlunit.html.HtmlPage;

12

13public class HtmlUnitTest2 {

14

15 public static void main(String[] args) {

16 WebClient webClient=new WebClient(BrowserVersion.FIREFOX_52); // 实例化Web客户端

17 try {

18 HtmlPage page=webClient.getPage("http://www.baidu.com");

19 HtmlDivision div=page.getHtmlElementById("navMenu"); // 查找指定id的html dom元素

20 System.out.println(div.asXml());

21 System.out.println("======================");

22 DomNodeList aList=page.getElementsByTagName("a"); // 根据tag名称查询所有tag

23 for(int i=0;i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线