【问题标题】:Issue using jsoup to select tags within div使用 jsoup 在 div 中选择标签的问题
【发布时间】:2015-06-12 16:41:15
【问题描述】:

我有一个包含如下内容的 html 文件:

<div class="title"><a href="../dorothy_perkins_true_blue_suedette/thing?id=130434603" title="Dorothy Perkins True blue suedette clutch bag">Dorothy Perkins True blue suedette clutch bag</a></div>

我想提取href中的url。我有以下代码:

            Document doc = Jsoup.connect(url).get();
            Elements products = doc.select("div.title a[href]");
            System.out.println("size: "+products.size());

打印显示,但是,大小为 0。它找不到任何匹配项。我使用的网址是http://www.polyvore.com/bags/shop?category_id=35。你可以看看源代码,我很确定上面的代码是正确的。如果有人能给出一些想法,那就太好了。非常感谢。

【问题讨论】:

  • 好像网站不想被抓取,所以你必须按照下面的答案更改用户代理。

标签: java javascript jquery html jsoup


【解决方案1】:

相信您使用以下代码进行连接。

doc = Jsoup.connect("http://www.polyvore.com/bags/shop?category_id=35").get();

如果你使用System.out.println(doc.html());,它会返回整个 HTML 源代码,这与我们通过 Mozilla 和 Chrome 等浏览器看到的完全不同。

要解决这个问题,需要在Jsoup连接中指定userAgent参数,如下所示。

    Document doc = null;
    Elements aEles = null;

    try {
        // doc = Jsoup.connect("http://www.polyvore.com/bags/shop?category_id=35").get();

        doc = Jsoup.connect("http://www.polyvore.com/bags/shop?category_id=35")
                .userAgent("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36")
                .referrer("http://www.google.com").get();

        if (doc != null) {
            aEles = doc.select("div.title > a");

            if (aEles != null)
                System.out.println("size: " + aEles.size());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

【讨论】:

  • 非常感谢您的帮助。但是你能进一步解释一下 userAgent 和 referrer 是什么吗?我从来没有用过它们。谢谢。
  • 网络服务器使用用户代理为不同的浏览器提供不同的网页。例如,网站可以将移动页面发送到移动浏览器,将现代页面发送到现代浏览器。当浏览器连接到网站时,它会在其 HTTP 标头中包含一个 User-Agent 字段,以便 Web 服务器可以识别浏览器。同样的逻辑也适用于 Referrer 标头,它告诉 Web 服务器链接到所请求资源的网页地址。当 Jsoup 连接到某个网站时,它可能需要伪装成浏览器。如果它适合您,请将其标记为答案。谢谢!
  • 使用此站点来识别浏览器的 userAgent 字符串。 whatsmyuseragent.com
猜你喜欢
  • 2023-03-20
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多