Java HTML 解析具有无限滚动的页面
Java HTML Parsing a Page with Infinite Scroll
如果页面有无限滚动,如何在 java 中抓取页面的 HTML?我目前正在以这种方式获取页面:
URL url = new URL(stringUrl);
URLConnection con = url.openConnection();
InputStream in = con.getInputStream();
String encoding = con.getContentEncoding();
encoding = encoding == null ? "UTF-8" : encoding;
String html = IOUtils.toString(in, encoding);
Document document = Jsoup.parse(html);
但它 return 没有任何与页面的无限滚动部分关联的内容。如何在 HTML 页面上触发滚动,以便我的 Jsoup 文档包含此部分?
无限滚动描述了一种页面不包含内容的技术。浏览器中的某些 JavaScript 代码 运行 向服务器发送附加内容请求并将其添加到页面。当您滚动到可用内容的末尾时,JavaScript 代码重复该过程:它发送另一个请求并添加其他内容。
因此,您需要一个带有 JavaScript 引擎的网络浏览器,该引擎可以 运行 JavaScript 代码并生成导致代码加载内容的事件。
@dsh 是对的,内容很可能是通过 AJAX 动态加载的。作为使用真实浏览器(即 selenium webdriver)的替代方法,您可以查看网络流量并确定页面触发的 API 调用。您可以直接使用 Jsoup 调用 Api。然而,内容通常不是 HTML,而是 JSON、XML 或其他格式。这样做仍然是非常值得的,因为使用 webdriver 通常非常慢并且占用大量资源。
如果页面有无限滚动,如何在 java 中抓取页面的 HTML?我目前正在以这种方式获取页面:
URL url = new URL(stringUrl);
URLConnection con = url.openConnection();
InputStream in = con.getInputStream();
String encoding = con.getContentEncoding();
encoding = encoding == null ? "UTF-8" : encoding;
String html = IOUtils.toString(in, encoding);
Document document = Jsoup.parse(html);
但它 return 没有任何与页面的无限滚动部分关联的内容。如何在 HTML 页面上触发滚动,以便我的 Jsoup 文档包含此部分?
无限滚动描述了一种页面不包含内容的技术。浏览器中的某些 JavaScript 代码 运行 向服务器发送附加内容请求并将其添加到页面。当您滚动到可用内容的末尾时,JavaScript 代码重复该过程:它发送另一个请求并添加其他内容。
因此,您需要一个带有 JavaScript 引擎的网络浏览器,该引擎可以 运行 JavaScript 代码并生成导致代码加载内容的事件。
@dsh 是对的,内容很可能是通过 AJAX 动态加载的。作为使用真实浏览器(即 selenium webdriver)的替代方法,您可以查看网络流量并确定页面触发的 API 调用。您可以直接使用 Jsoup 调用 Api。然而,内容通常不是 HTML,而是 JSON、XML 或其他格式。这样做仍然是非常值得的,因为使用 webdriver 通常非常慢并且占用大量资源。