【发布时间】:2019-06-03 16:35:58
【问题描述】:
我想抓取一个网站,但是当我使用Jsoup.connect(url) 连接到它时,只加载了页面的一部分。
当我将页面下载为 html 时,我看到页面的一部分只有一个加载器图标,因此我得出结论,页面的该部分是后来从其他来源加载的。
有趣的是,inspect 元素包含缺少的 html,而查看页面源代码却没有。从 jSoup 加载的 HTML 与从“查看页面源”打开时基本相同。
有没有办法绕过这个并加载整个页面,因为它显示在浏览器中?
有问题的页面是这样的:https://www.oddsportal.com/tennis/australia/atp-australian-open-2017/results/page/1/
询问我可以提供的任何其他信息。
================
编辑: 我正在像这样连接到 url:
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>
【问题讨论】:
-
正在加载页面的哪一部分?你的代码是什么样的?请编辑您的问题并添加这些详细信息。
-
从 jSoup 加载时,@CardinalSystem Div 和
id=tournamentTable为空。 -
@CardinalSystem 已编辑,但我认为它与代码无关,因为此页面的源代码也不包含此 div 中的任何内容。如果我检查 div 内的某些元素(在 chrome 中),我只能看到这个 div。
-
数据正在被 Javascript 注入。您需要等待页面完全加载,然后拉取其内容。或者直接查询其后端 API。
-
在浏览器中关闭对该页面的 JavaScript 支持,看看它的外观。这就是 Jsoup 的价值所在。它不是支持 JavaScript 的浏览器模拟器,因此您需要使用其他工具。请参阅副本(问题顶部的链接)以获取建议。
标签: java web-scraping web-crawler jsoup