我从一个工作得很好的网站上收集了一些JSON数据。我可以登录并下载必要的数据。然而,在一种情况下,我必须下载一个HTML页面来从HTML中提取信息。
我已经修改了请求头,使它们与使用Chrome developer options (F12)可见的头相匹配。
Request request = new Request.Builder().url(url)
.header("Host", "www.host.com")
.header("Connection", "Keep-Alive")
.header("Cache-Control", "max-age=0")
.header("Upgrade-Insecure-Requests", "1")
.header("User-Agent",this.user_agent_user_for_this_session)
.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
.header("Accept-Encoding", "gzip, deflate, br")
.header("Accept-Language", "en-US,en;q=0.9,fr;q=0.8,nl;q=0.7,de;q=0.6,af;q=0.5")
.get().build();
Response response = client.newCall(request).execute();
String html = IOUtils.toString(new GZIPInputStream(response.body().byteStream()));
我收到了一个HTML文件,但与从Chrome手动保存的HTML文件相比,它要小得多(将源保存为)。我注意到HTML文件中有各种各样的ng (角度)引用,这让我想知道我是不是只收到了某个未完成的javascript进程的第一部分?
此外,下载的HTML看起来与在Chrome的第一个网络视图中下载的HTML文件相同(我复制粘贴的内容和文件大小相同)。
那么,我应该允许对请求进行一些额外的分析吗?
发布于 2018-09-13 03:50:01
如果它是角度页面,那么你就不走运了--整个页面都是在运行时生成的,所以实际的index.html
有点小。
作为变通方法,我使用Selenium在无头浏览器中实际打开页面,并在angular应用程序初始化后获取内容(也就是构建了DOM )。
https://stackoverflow.com/questions/52302384
复制相似问题