使用jsoup提取价格

时间:2017-07-17 07:01:41

标签: java jsoup

我想从这个页面来源获得9.99的价格。 https://www.walmart.com/ip/Terminator-Genisys-DVD/45863333?sourceid=api00ctd43f4bc7559f459fae574f62a0e9de01&affp1=%7Capk%7C&affilsrc=api&veh=aff&wmlspartner=readonlyapi

我正在使用的代码是

    public String doubleCheckPrice(String html, IDoubleCheckable availability) throws URISyntaxException, IOException{
    Document doc = Jsoup.parse(html);
    String price = null;

    for(Element meta : doc.select("div")) {
      if((meta.attr("itemprop") != null) && (meta.attr("itemprop").equals("price"))) {
        price = meta.text();
        price = price.replace("$", "").trim();
        logger.debug("Extracted price via double check {} for availability {}", price, availability.getUrl());
      }
    }

    if(price == null) {
      Elements elements = doc.select(".js-price-display");
      if(elements != null && elements.size() > 0) {
        price = elements.get(0).text();
        price = price.replace("$", "").trim();
      }
    }

    return price;
  }

但是我变得空了。任何帮助将不胜感激。 感谢

3 个答案:

答案 0 :(得分:0)

我认为你应该为此目的使用沃尔玛的API。这是最好的方式。

或者,如果您不能使用API​​,则应使用此框架。看看它nvm

此框架允许您创建结构化文档,并帮助您迭代标签,类或ID。然后,您可以使用findElementsById来获取数据。看一下网站的例子。

答案 1 :(得分:0)

我得到了解决方案。这就是

for(Element meta : doc.select(".Price-group")) {

        if(meta.attr("aria-label")!=null)
        {
            System.out.println(meta.attr("aria-label"));
            price=meta.text();
            price = price.replace("$", "").trim();
            logger.debug("Extracted price via double check {} for availability {}", price, availability.getUrl());


        }

答案 2 :(得分:0)

这是解决方案

Elements priceElms=document.select(".prod-BotRow.prod-showBottomBorder.prod-OfferSection .prod-PriceHero .Price-group");
if(priceElms.size() > 0){
String price=priceElms.get(0).text();
price=price.replace("$","");
}

无需循环获取值,只需选择所需的相应字段并使用Jsoup选择器。 感谢