【问题标题】:Jsoup is giving a different HTML document compared to my browser与我的浏览器相比,Jsoup 提供了不同的 HTML 文档
【发布时间】:2018-12-23 09:40:12
【问题描述】:

我确保使用浏览器的用户代理,它仍然提供不同的 HTML。我还尝试使用 Jsoup.parse(Url, int) 而不是 Jsoup.connect(String)。两次尝试:

Document doc = Jsoup.connect("https://www.bulq.com/lots/search/?category=Consumer%20Electronics&condition%5B%5D=Brand%20New")
.userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.1Safari/605.1.15")
.get();

URL mainUrl = new URL("https://www.bulq.com/lots/search/category=Consumer%20Electronics&condition%5B%5D=Brand%20New");
Document doc = Jsoup.parse(mainUrl, 6000);

我在“元素”选项卡中使用 Safari 的“显示页面源代码”。我尝试在下面复制一些 HTML,但格式不起作用:(所以这是一个小例子。

示例:Jsoup HTML 中的 div 类之一是:

div class="row ng-cloak" ui-view

而 Safari HTML 是:

div class="row ng-scope" ui-view

【问题讨论】:

  • 你能告诉我们有什么区别吗?可能是“显示页面源代码”没有显示所有内容。
  • 文件相似但肯定不一样,我会尝试用例子编辑
  • JSoup 检索到的文档是否以<!DOCTYPE html> 开头,并且显示页面源没有显示?
  • elements -> show page source是否显示原始来源或通过javascript生成元素后的来源(“生成的来源”)?这些显然是不同的。
  • 不,它们都以 !DOCTYPE html 开头>

标签: java html web-scraping jsoup


【解决方案1】:

我认为您可以尝试使用 jsoup 将 User-Agent 作为标头发送

Document doc = Jsoup.connect(url)
                    .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.7 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.7")
                    .get();

【讨论】:

    【解决方案2】:

    您可以尝试通过以下方式获取页面:

    URL u = new URL("https://www.google.com/"); //replace https://www.google.com/ with your url
    InputStream in = u.openStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    StringBuilder result = new StringBuilder();
    String line;
    while((line = reader.readLine()) != null) {
        result.append(line);
    }
    System.out.println(result.toString());
    

    这不需要库,也许会返回确切的页面...

    【讨论】:

    • 我正在使用 Jsoup 作为网络爬虫来收集特定链接并从该站点下载特定文件。我的问题是我正在尝试使用 Jsoup 找不到的 Safari HTML 页面中的元素。
    • 好的,我只是想知道它是否可以使用。
    【解决方案3】:

    如果您从“元素”选项卡查看实时 DOM,那么其中一些类可能会因 JavaScript 而不同,当 Jsoup 从服务器获取原始 HTML 时,它不会运行。

    【讨论】:

      【解决方案4】:

      我在尝试获取 url1 的内容时遇到了同样的问题,但 jsoup 返回了 another url 的内容(可能是 jsoup 被重定向)。 感谢@Zendy 的回答,我找到了解决方案:

      • 第一步:打开浏览器按F12打开开发者工具,导航到Network标签页。
      • 将浏览器导航到您需要获取内容的网址
      • 获取请求标头上的用户代理并将其设置到您的 jsoup 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-20
        • 1970-01-01
        • 2019-04-15
        • 2012-03-06
        • 2015-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多