Http URLConnection 等待内部请求

Http URLConnection wait for inner request

我正在做一个爬虫项目。当我对网站进行简单的 URLConnection 连接时,如下所示:

URLConnection conn = new URL(url).openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

方法returnsHTML正文正确。但是,该网站对某些字段进行了内部请求。例如,该网站从不同的网络服务中获取用户总数。在网页浏览器中,总用户数会在一段时间后出现,但使用URLConnection方法不会等待总用户数,返回的HTML不包含该字段。

在Java中,有什么方法可以等待一段时间从使用URLConnection的网站获取所有数据。

通常情况下,如果您正在获取页面的 html 正文,那么在该网站的服务器端进行的所有调用都必须已完成。

如果网站不包含 Javascript,则使用 Java 的 Jsoup (https://jsoup.org) 库。它加载呈现最终 HTML 页面所需的所有内部 HTML 请求。

根据您的 "inner requests" 评论,听起来网站正在使用 JavaScript(通过框架或仅使用本机浏览器 API)来获取数据并将这些结果呈现到 DOM. This is very common nowadays with SPAs等等

如果是这种情况,再多的等待也不会改变使用像 URLConnection 这样的简单 HTTP 库的结果 - 但您可以通过在本地保存 HTML 并在您的浏览器 - 会发生什么?当您检查它时,该页面上是否有 JavaScript?

要在代码中正确执行此操作,您需要能够表现得更像浏览器的东西,并在类似 DOM 的环境中执行 HTML 引用的 JS。试试 Selenium with PhantomJS or headless Chrome / Firefox, or maybe GhostDriver.