JSoup不会加载整个HTML

时间:2019-01-08 23:08:38

标签: java web-scraping web-crawler jsoup

我想抓取一个网站,但是当我使用Jsoup.connect(url)连接到该网站时,只会加载页面的一部分。

当我将页面下载为html时,我看到页面的一部分中只有一个加载器图标,因此我得出结论,页面的那一部分是后来从其他来源加载的。

有趣的是,inspect元素包含缺少的html,而视图页面源中没有。从jSoup加载的HTML与从“查看页面源”打开的HTML基本相同。

有没有一种方法可以绕过此过程并加载浏览器中显示的整个页面?

有问题的页面是这样的:https://www.oddsportal.com/tennis/australia/atp-australian-open-2017/results/page/1/

询问我能提供的其他信息。

===============

编辑: 我正在连接到这样的网址:

Document doc = null;

try {
    doc =  Jsoup.connect(url).get();
} catch (IOException e) {
    e.printStackTrace();
}

我正在使用CSS选择器获取此div:

Elements tournamentTable = doc.select("div[id=tournamentTable]");

tournamentTable的内容为<div id="tournamentTable"></div>

1 个答案:

答案 0 :(得分:3)

似乎id=tournamentTable是使用javascript动态生成的。 JSoup没有评估javascript,因此您必须使用HtmlUnit之类的库。例如:

WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setJavaScriptEnabled(true); // enable javascript
webClient.getOptions().setThrowExceptionOnScriptError(false); //even if there is error in js continue
webClient.waitForBackgroundJavaScript(5000); // important! wait when javascript finishes rendering
HtmlPage page = webClient.getPage(url);

page.getElementById("tournamentTable");