htmlunit 抓取网页(htmlunitjava页面分析工具模拟运行 )

优采云 发布时间: 2022-02-28 04:02

  htmlunit 抓取网页(htmlunitjava页面分析工具模拟运行

)

  htmlunit 是一个开源的java页面分析工具。阅读完页面后,可以有效地使用htmlunit对页面内容进行分析。

  该项目可以模拟浏览器的操作,被称为java浏览器的开源实现。是没有界面的浏览器。

  使用了 Rhinojs 引擎。模拟js运行。

  使用htmlunit抓取网页大致可以分为以下几个步骤:

  1、定义一个 WebClient 客户端。

  相当于定义了一个没有界面的浏览器。

  2、使用WebClient客户端从指定的URL获取HtmlPage。

  HtmlPage 收录目标 URL 页面中的所有信息。

  3、从 HtmlPage 中获取我们需要的指定元素。

  我们来看一个例子:

  1package com.fuwh;

2

3import com.gargoylesoftware.htmlunit.WebClient;

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

5

6public class Demo01 {

7

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

9

10 WebClient webClient=null;

11 try {

12 webClient= new WebClient(); //定义一个默认的WebClient

13 HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage

14 System.out.println(page.asText()); //将HtmlPage转换成字符串打印出来

15 } catch (Exception e) {

16 // TODO: handle exception

17 e.printStackTrace();

18 }finally {

19 webClient.close(); //关闭客户端

20 }

21 }

22}

23

  在上面的例子中,我们创建了一个默认的WebClient实例,使用WebClient#getBrowserVersion()方法,可以看到,

  默认创建Chrome版本的浏览器。

  当然,我们也可以在创建时指定浏览器版本。

  例子:

  1package com.fuwh;

2

3import com.gargoylesoftware.htmlunit.BrowserVersion;

4import com.gargoylesoftware.htmlunit.WebClient;

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

6

7public class Demo01 {

8

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

10

11 WebClient webClient=null;

12 try {

13 webClient= new WebClient(BrowserVersion.FIREFOX_45); //定义一个WebClient

14 HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage

15 System.out.println(page.asText()); //将HtmlPage转换成字符串打印出来

16 } catch (Exception e) {

17 // TODO: handle exception

18 e.printStackTrace();

19 }finally {

20 webClient.close(); //关闭客户端

21 }

22 }

23}

24

  在 BrowserVersion 中,定义了许多浏览器版本。

  在获得一个 HtmlPage 之后,我们仍然希望能够找到我们想要的元素,而不是输入整个页面。

  HtmlUnit 还为查找特定元素提供了丰富的支持。

  支持使用 DOM、CSS 和 XPath 的方式(推荐)。

  ◇使用DOM方法:

  1package com.fuwh;

2

3import com.gargoylesoftware.htmlunit.BrowserVersion;

4import com.gargoylesoftware.htmlunit.WebClient;

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

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

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

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

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

10

11public class Demo01 {

12

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

14

15 WebClient webClient=null;

16 try {

17 webClient= new WebClient(BrowserVersion.FIREFOX_45); //定义一个WebClient

18 final HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage

19

20 /**

21 * DomElement 的子类:HtmlElement

22 * HtmlElemnt也有很多子类,基本上涵盖了所有的Html元素

23 * 例如:HtmlDivision,HtmlInput

24 */

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

26 //通过id获取指定DOM元素

27 HtmlDivision htmlDiv=(HtmlDivision) page.getElementById("header");

28 System.out.println(htmlDiv.asXml());

29

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

31 //通过tagName来获取元素集合

32 DomNodeList nodeList=page.getElementsByTagName("a");

33 for (DomElement domElement : nodeList) {

34 HtmlAnchor htmlAnchor=(HtmlAnchor) domElement;

35 System.out.println("标题:"+htmlAnchor.asText()+" --> 地址:"+htmlAnchor.getAttribute("href"));

36 }

37

38 } catch (Exception e) {

39 // TODO: handle exception

40 e.printStackTrace();

41 }finally {

42 webClient.close(); //关闭客户端

43 }

44 }

45}

46

  ◇使用CSS方法:

  1package com.fuwh;

2

3import com.gargoylesoftware.htmlunit.BrowserVersion;

4import com.gargoylesoftware.htmlunit.WebClient;

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

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

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

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

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

10

11public class Demo02 {

12

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

14

15 WebClient webClient=null;

16 try {

17 webClient= new WebClient(BrowserVersion.FIREFOX_45); //定义一个WebClient

18 final HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage

19

20 HtmlDivision htmlDiv =page.querySelector("div");//获取第一个div

21 System.out.println(htmlDiv.asXml());

22

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

24

25 HtmlDivision htmlDiv2=page.querySelector("div#footer_bottom");//也可以指定多个选择器,通过‘,’隔开

26 System.out.println(htmlDiv2.asXml());

27 } catch (Exception e) {

28 // TODO: handle exception

29 e.printStackTrace();

30 }finally {

31 webClient.close(); //关闭客户端

32 }

33 }

34}

35

  ◇使用XPath方法:

  1package com.fuwh;

2

3import java.util.List;

4

5import com.gargoylesoftware.htmlunit.BrowserVersion;

6import com.gargoylesoftware.htmlunit.WebClient;

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

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

9

10public class Demo03 {

11

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

13

14 WebClient webClient=null;

15 try {

16 webClient= new WebClient(BrowserVersion.FIREFOX_45); //定义一个WebClient

17 final HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage

18

19 List divList=page.getByXPath("//div[@id='cnblogs_a1']");

20 for (HtmlDivision htmlDivision : divList) {

21 System.out.println("***********************************************8");

22 System.out.println(htmlDivision.asXml());

23 }

24

25 } catch (Exception e) {

26 // TODO: handle exception

27 e.printStackTrace();

28 }finally {

29 webClient.close(); //关闭客户端

30 }

31 }

32}

33

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线