java - OkHttp3 抓取的 HTML 页面不完整,需要 JavaScript 吗?

标签 java okhttp

我正在从一个运行良好的网站上抓取一些 JSON 数据。我可以登录并下载必要的数据。但是,在一种情况下,我必须下载 HTML 页面才能从 HTML 中提取信息。

我修改了请求 header ,使其与使用 Chrome 开发人员选项 (F12) 可见的请求 header 相匹配。

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 第一个 WebView 中下载的 HTML 文件相同(我复制粘贴了内容,文件大小相同)。

那么我应该允许对请求进行一些额外的分析吗?

最佳答案

如果它是有角度的页面,那么你就不走运了 - 整个页面是在运行时生成的,所以实际的 index.html 有点小。

作为解决方法,我使用 Selenium 在 headless 浏览器中实际打开页面,并在初始化角度应用程序(也称为构建 DOM)后获取内容。

关于java - OkHttp3 抓取的 HTML 页面不完整,需要 JavaScript 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52302384/

相关文章:

android - 在Android中为OkHttp设置缓存的正确方法

java - Content-Disposition 值 : form-data; name ="userfile"; filename ="IMG_٢٠١٩١١١٥_٠٩٠٢٠٤١١٤.jpg" 中 42 处的意外字符 0x662

java - Saxonica 9.7.0.4 中的 com.saxonica.ptree.StylesheetPackager 发生了什么?

java - 从文件数据构建两个二维数组

java - 如何创建圆形水平 ScrollView

java - 致命异常 : OkHttp Dispatcher

android - 现在 SSLSocketFactory 在 Android 上已被弃用,处理客户端证书身份验证的最佳方法是什么?

java - 为暂存文件创建缺失的类意图

java - 在触摸表面上隐藏 ActionBar

android - 仅使用缓存响应。无网络通话