使用 Jsoup 从网页获取价格

Get price from webpage using Jsoup

我正在尝试获取网页上产品的价格。 具体来自以下 html。我不知道如何使用 CSS 但这些是我目前的尝试。

<div class="pd-price grid-100">
  <!-- Selling Price -->
    <div class="met-product-price v-spacing-small" data-met-type="regular">
      <span class="primary-font jumbo strong art-pd-price">
        <sup class="dollar-symbol" itemprop="PriceCurrency" content="USD">$</sup>
         399.00</span>
      <span itemprop="price" content="399.00"></span>
    </div>
</div>

> 399.00 美元

这显然位于网页的更深处,但这是我尝试 运行 的 java 代码。

    String url ="https://www.lowes.com/pd/GE-700-sq-ft-Window-Air-Conditioner-115-Volt-14000-BTU-ENERGY-STAR/1000380463";
    Document document = Jsoup.connect(url).timeout(0).get();
    String price = document.select("div.pd-price").text();
    String title = document.title(); //Get title
    System.out.println("  Title: " + title); //Print title.
    System.out.println(price);
Element priceDiv = document.select("div.pd-price").first();
String price = priceDiv.select("span").last().attr("content");

如果你也需要货币:

String priceWithCurrency = priceDiv.select("sup").text();

我不是 运行 这些,但应该可以。 有关详细信息,请参阅 JSoup API reference

首先你应该熟悉CSS选择器

W3School 有一些资源可以帮助您入门。

在这种情况下,您需要的东西位于 divpd-price class 中 所以 div.pd-price 已经正确了。

您需要先获取元素。

Element outerDiv = document.selectFirst("div.pd-price");

然后用另一个选择器

得到子div
Element innerDiv = outerDiv.selectFirst("div.met-product-price");

然后获取里面的span元素

Element spanElement = innerDiv.selectFirst("span.art-pd-price");

此时您可以获得 <sup> 元素,但在这种情况下,您可以调用 text() 方法来获取文本

System.out.println(spanElement.text());

这将打印

$ 399.0

编辑: 在其他答案中看到评论后

您可以从浏览器获取 cookie 并从 Jsoup 发送它以绕过邮政编码要求

Document document = Jsoup.connect("https://www.lowes.com/pd/GE-700-sq-ft-Window-Air-Conditioner-115-Volt-14000-BTU-ENERGY-STAR/1000380463")
                        .header("Cookie", "<Your Cookie here>")
                        .get();