如果页面有无限滚动,如何在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);
但它不会返回与页面的无限滚动部分相关联的任何内容。如何在HTML页面上触发此滚动,以便我的Jsoup文档包含此部分?
答案 0 :(得分:4)
无限滚动描述了一种页面不包含内容的技术。一些JavaScript代码在浏览器中运行,向服务器发送请求以获取附加内容并将其添加到页面中。当您滚动到可用内容的末尾时,JavaScript代码会重复该过程:它会发送另一个请求并添加其他内容。
因此,您需要一个带有JavaScript引擎的Web浏览器,该引擎可以运行JavaScript代码并生成导致代码加载内容的事件。
答案 1 :(得分:0)
@dsh是对的,内容很可能是通过AJAX动态加载的。作为使用真实浏览器(即selenium webdriver)的替代方法,您可以查看网络流量并确定页面触发的API调用。你可以用Jsoup直接调用Api。但是,内容通常不是HTML,而是JSON,XML或其他格式。这样做仍然非常值得,因为使用webdriver通常非常慢且资源丰富。