htmlunit抓取动态网页( jsoup可以用来获取HTML页面并且分析读取页面内容吗?)

优采云 发布时间: 2021-11-14 02:06

  htmlunit抓取动态网页(

jsoup可以用来获取HTML页面并且分析读取页面内容吗?)

  如何使用工具获取动态HTML页面内容

  我们知道jsoup可以用来获取HTML页面,分析读取页面内容。

  例如:

  import java.io.IOException;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

public class Test {

public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub

Document doc = Jsoup.connect("http://www.XXX.com/path/to/page.htm").get();

System.out.println(doc.title());

Elements newsHeadlines = doc.select("#mp-itn b a");

for (Element headline : newsHeadlines) {

System.out.printf("%s\n\t%s",

headline.attr("title"), headline.absUrl("href"));

}

}

}

  但是jsoup有一个缺点,就是只能访问静态页面。对于动态页面,包括动态加载的元素,jsoup 无法处理;原因是有些网页为了浏览器的显示效果增加了用户的体检,而不是一次生成整个页面,而是在页面的基本框架显示出来后,使用js/ajax技术动态刷新和填写页面。对于这种页面,只需要解析HTML页面,执行JS代码就可以完成整个页面的加载;也就是说,需要尽可能模拟浏览器的加载行为。

  最近发现HtmlUnit可以支持这个功能。

  但顾名思义,它并不是一个完整的产品,它仅用于测试以模拟浏览器的行为。

  举个例子:

  import java.io.IOException;

import java.util.List;

import com.gargoylesoftware.htmlunit.BrowserVersion;

import com.gargoylesoftware.htmlunit.WebClient;

import com.gargoylesoftware.htmlunit.html.DomElement;

import com.gargoylesoftware.htmlunit.html.HtmlDivision;

import com.gargoylesoftware.htmlunit.html.HtmlListItem;

import com.gargoylesoftware.htmlunit.html.HtmlPage;

import com.gargoylesoftware.htmlunit.html.HtmlUnorderedList;

public class Test {

private static WebClient webClient;

public static void main(String[] args) throws IOException {

//webClient = new WebClient(BrowserVersion.CHROME, "proxy.com", 80);

webClient = new WebClient(BrowserVersion.CHROME);

HtmlPage page = webClient.getPage(""http://www.XXX.com/path/to/page.htm"");

HtmlDivision div1 = page.getHtmlElementById("ksorder");

List divs = div1.getByXPath("//div[@class='sourceshow']");

assert(divs.size() == 1);

HtmlDivision div2 = divs.get(0);

Iterable uls = div2.getChildElements();

for (DomElement eul : uls) {

HtmlUnorderedList ul = (HtmlUnorderedList)eul;

Iterable lis = ul.getChildElements();

for (DomElement eli : lis) {

HtmlListItem li = (HtmlListItem)eli;

System.out.printf("data=[%s], class=[%s]\n", li.getAttribute("data-id"), li.getAttribute("class"));

}

}

}

}

  HTML页面内容的分析框架与jsoup类似,具体可以参考文档。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线