使用Jsoup从网页获取价格

时间:2018-07-31 00:13:09

标签: 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.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);

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

在这种情况下,您需要的东西位于searcher.add_word类的 ... padding_start = [" ", "\n", "\t"] padding_end = [" ", ".", ";", ",", "-", "–", "—", "?", "!", "\n"] for i, needle in enumerate(needles): for s, e in [(s,e) for s in padding_start for e in padding_end]: searcher.add_word(s + needle + e, i) searcher.make_automaton() # Add up all frequencies for _, i in searcher.iter(" " + haystack + " "): ... 内部 因此div已经正确。

您需要先获取元素。

pd-price

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

div.pd-price

然后在其中获取span元素

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

这时您可以获得Element innerDiv = outerDiv.selectFirst("div.met-product-price"); 元素,但是在这种情况下,您可以调用Element spanElement = innerDiv.selectFirst("span.art-pd-price"); 方法来获取文本

<sup>

这将打印

  

$ 399.0

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

您可以从浏览器中获取cookie,然后从Jsoup发送它以跳过邮政编码要求

text()