我正在抓取项目。当我与网站进行简单的URLConnection
连接时,如下所示:
URLConnection conn =新的URL(url).openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
该方法正确返回HTML正文。但是,该网站对某些字段提出了内部要求。例如,网站从不同的Web服务获取用户总数。在Web浏览器中,总用户数会在一段时间后出现,但是使用URLConnection
方法不会等待总用户数,并且返回的HTML不包含该字段。
在Java中,有什么方法需要等待一段时间才能使用URLConnection
从网站中获取所有数据。
答案 0 :(得分:1)
从您的“内部请求”评论看来,网站正在使用JavaScript(通过框架或仅使用本机浏览器API)来获取数据并将这些结果呈现到DOM中。如今,这在SPAs等中非常普遍。
在这种情况下,使用URLConnection
这样的简单HTTP库不会产生任何等待的结果-但是您可以通过在本地保存HTML并在浏览器中查看HTML来进行检查-会发生什么?当您检查它时,该页面上有JavaScript吗?
要在代码中正确执行此操作,您将需要具有类似于浏览器的功能,并能够在类似DOM的环境中执行HTML引用的JS。尝试使用Selenium或PhantomJS或无头Chrome / Firefox来使用GhostDriver。
答案 1 :(得分:0)
通常,如果您要获取页面的html正文,则必须已完成在此网站的服务器端进行的所有调用。
答案 2 :(得分:0)
如果网站不包含Javascript,则使用Java的Jsoup(https://jsoup.org)库。它将加载呈现最终HTML页面所需的所有内部HTML请求。