当前位置: 首页 > 知识库问答 >
问题:

使用 Jsoup 解析 div 内部的跨度

戴建义
2023-03-14

给定此网页:

<div id="cat-product-list" alt1="356623" class="product-list list_all_items_price price_new"><span id="wholesale_11_member_price" class="index-price special_price final_price" price="US$5.25"><strong class="final_price_strong">US$5.25</strong><b class="show_vip">(vip)</b></span><span id="wholesale_12_member_price" class="index-price special_price final_price" price="US$4.90" style="display: none"><strong class="final_price_strong">US$4.90</strong><b class="show_vip">(vip)</b></span><span id="wholesale_13_member_price" class="index-price special_price final_price" price="US$4.55" style="display: none"><strong class="final_price_strong">US$4.55</strong><b class="show_vip">(vip)</b></span><span id="wholesale_14_member_price" class="index-price special_price final_price" price="US$4.20" style="display: none"><strong class="final_price_strong">US$4.20</strong><b class="show_vip">(vip)</b></span><span id="shop_price_member_price_on" class="index-price shop_price" price="US$7.00"><strike>US$7.00</strike></span></div>

我试图选择div内部的第一个span,然后获取强值。到目前为止,我成功地收集了其他东西,但是我无法完成:

Document d = Jsoup.connect("http://www.emmacloth.com/Clothing-vc-7061.html?icn=clothing&ici=ec_navbar05").timeout(6000).get();
    Elements elements =  d.select("div#productsContent1_goods.products_category");
    for (Element element: elements.select("div.box-product-list.list_all_items")){
        System.out.println("start");
        String productImage = element.select("div.goods_aImg a img").attr("src");
        String productname = element.select("div.goods_mz a").attr("title");
        String productUrl = "http://www.emmacloth.com" + element.select("div.goods_mz a").attr("href");
 //         String productPrice = element.select("div.product-
list.list_all_items_price.price_new >span.index-price.special_price.final_price").toString();
        Elements priceElements = element.select(
                "div.product-list.list_all_items_price.price_new > span.index-price.special_price.final_price"
        );

        for (Element priceElement : priceElements) {
            System.out.println(priceElement.attr("price"));
        }
//          System.out.println(productPrice);



    }
}

共有1个答案

仲孙善
2023-03-14

在这个div中,您正在寻找具有以下类的及格index-pricespecial_pricefinal_price,并且(我认为)您想从中提取价格

鉴于您的问题中提供的html,以下代码...

String html = "<div id=\"cat-product-list\" alt1=\"356623\" class=\"product-list list_all_items_price price_new\">" +
    "<span id=\"wholesale_11_member_price\" class=\"index-price special_price final_price\" price=\"US$5.25\">" +
    "<strong class=\"final_price_strong\">US$5.25</strong>" +
    "<b class=\"show_vip\">(vip)</b>" +
    "</span>" +
    "<span id=\"wholesale_12_member_price\" class=\"index-price special_price final_price\" price=\"US$4.90\" style=\"display: none\">" +
    "<strong class=\"final_price_strong\">US$4.90</strong>" +
    "<b class=\"show_vip\">(vip)</b>" +
    "</span>" +
    "<span id=\"wholesale_13_member_price\" class=\"index-price special_price final_price\" price=\"US$4.55\" style=\"display: none\">" +
    "<strong class=\"final_price_strong\">US$4.55</strong>" +
    "<b class=\"show_vip\">(vip)</b>" +
    "</span>" +
    "<span id=\"wholesale_14_member_price\" class=\"index-price special_price final_price\" price=\"US$4.20\" style=\"display: none\">" +
    "<strong class=\"final_price_strong\">US$4.20</strong>" +
    "<b class=\"show_vip\">(vip)</b>" +
    "</span>" +
    "<span id=\"shop_price_member_price_on\" class=\"index-price shop_price\" price=\"US$7.00\"><strike>US$7.00</strike></span>" +
    "</div>";

Document doc = Jsoup.parse(html);

// this selector selects the div(s) having classes: "product-list list_all_items_price price_new"
// and within that div, it selects the span(s) having the classes: "index-price special_price final_price"
Elements priceElements = doc.select(
        "div.product-list.list_all_items_price.price_new > span.index-price.special_price.final_price"
);

for (Element priceElement : priceElements) {
    System.out.println(priceElement.attr("price"));
}

...将打印出产品价格:

US$5.25
US$4.90
US$4.55
US$4.20

针对他的评论:

或者由于某种原因,整个网站无法正常工作,你能检查我修改后的问题吗

下面的代码...

Document d =
        Jsoup.connect("http://www.emmacloth.com/Clothing-vc-7061.html?icn=clothing&ici=ec_navbar05").timeout(6000).get();
for (Element element : d.select("div#productsContent1_goods.products_category > div.box-product-list.list_all_items")) {
    System.out.println("start");
    String productImage = element.select("div.goods_aImg > a > img").attr("src");
    String productname = element.select("div.goods_mz > a").attr("title");
    String productUrl = "http://www.emmacloth.com" + element.select("div.goods_mz > a").attr("href");

    System.out.println(productImage);
    System.out.println(productname);
    System.out.println(productUrl);
}

..将打印:

http://img.ltwebstatic.com/images/pi/201710/3b/15090086488079557831_thumbnail_220x293.jpg
Pearl Embellished Bow Tied Bell Cuff Blouse
http://www.emmacloth.com/Pearl-Embellished-Bow-Tied-Bell-Cuff-Blouse-p-403325-cat-1733.html
... etc

到目前为止,一切顺利。但是< code >价格呢?如果您查看该网页的源代码,您会看到价格元素是由该页面上的< code>category_price JS函数提供的动态内容。因此,该元素不是静态存在的,因此不能被JSoup读取。为了阅读动态内容,你必须使用Selenium之类的网络驱动程序。

 类似资料:
  • 这是我试图解析的html: 我想得到

  • 我试图从这些div标签中获取文本,但是它们都不返回任何内容: HTML: 我想得到div类“消息”和h4标记和跨越“日期时间”中的文本,我试图: 和: 但是他们没有成功。

  • 问题内容: 这是我的HTML来源 这是我获取内容的Java程序,它过滤HTML标记 是否有使用Jsoup而不是使用Java而不是Regex解析HTML内容的简便方法 有没有办法只获取所需的内容。所以在这里我只需要内容“项目2-222” 问题答案: 尝试使用jsoup轻松解析: 要了解更多信息,请访问Jsoup Docs

  • 问题内容: 我无法使用Jsoup库从此处获取div 。 这是我的代码: 问题答案: 此标记中的文本不是初始html的一部分,而是在页面加载后由JavaScript设置的。您可以通过在浏览器中禁用JavaScript进行检查。Jsoup仅获取静态html,不执行JavaScript代码。 当您检查从页面建立的连接时,您会发现该值是通过对此API的请求进行更新的: https://shapeshift

  • 我想解析出这个Nasa页面上的描述,页面底部的文字 我该怎么做?

  • 我试图用Jsoup解析Javadocs,但提取标记中包装的文本时遇到问题。 下面是我试图解析的HTML示例: 我试图使用这段代码来解析标签中包含的文本: 然而,无论我尝试什么,包含在标签中的文本都会消失。 以下是我得到的输出示例: 这就像是JSoup只是把任何包裹在标签中的东西丢弃。有人知道如何保留这些标签并从中提取文本吗?