有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用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

这显然存在于网页中,但下面是我试图运行的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);

共 (2) 个答案

  1. # 1 楼答案

    首先,你应该熟悉CSS选择器

    W3School 有一些资源可以让你开始

    在本例中,您需要的东西位于divpd-price类中 所以div.pd-price已经是正确的了

    你需要先得到元素

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

    然后用另一个选择器获取子div

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

    然后把跨度元素放进去

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

    此时,您可以获取<sup>元素,但在本例中,您可以调用text()方法来获取文本

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

    这会打印出来

    $ 399.0

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

    您可以从浏览器获取cookie,然后从Jsoup发送cookie,以绕过zipcode要求

    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();
    
  2. # 2 楼答案

    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