【问题标题】:How to get span class text using jsoup如何使用 jsoup 获取跨度类文本
【发布时间】:2015-08-15 11:56:37
【问题描述】:

我正在使用 jsoup HTML 解析器并尝试进入 span 类并从中获取文本,但它什么也不返回,它的大小始终为零。我已经粘贴了一小部分 HTML 源代码。请帮我提取文本。

<div class="list_carousel">
<div class="rightfloat arrow-position">
    <a class="prev disabled" id="ucHome_prev" href="#"><span>prev</span></a>
    <a class="next" id="ucHome_next" href="#"><span>next</span></a>
</div>
<div id="uc-container" class="carousel_wrapper">
    <ul id="ucHome">

                <li modelID="587">  
                    <h3 class="margin-bottom10"><a href="/ford-cars/figo-aspire/" title="Ford Figo Aspire "> Ford Figo Aspire</a></h3>
                    <div class="border-dotted margin-bottom10"></div>
                    <div>Estimated Price: <span class="cw-sprite rupee-medium"></span> 5.50 - 7.50 lakhs</div>
        <div class="border-dotted margin-top10"></div>
                </li>

                <li modelID="899">
                    <h3 class="margin-bottom10"><a href="/chevrolet-cars/trailblazer/" title="Chevrolet Trailblazer "> Chevrolet Trailblazer</a></h3>
                    <div class="border-dotted margin-bottom10"></div>   
                    <div>Estimated Price: <span class="cw-sprite rupee-medium"></span> 32 - 40 lakhs</div>
        <div class="border-dotted margin-top10"></div>
                </li>

我试过下面的代码:

Elements var_1=doc.getElementsByClass("list_carousel");//four classes with name of list_carousel
        Elements var_2=var_1.eq(1);//selecting first div class
        Elements var_3 = var_2.select("> div > span[class=cw-sprite rupee-medium]");
        System.out.println(var_3 .eq(0).text());//printing first result of span text

如果我的内容对你来说不是很清楚,请问我。提前致谢。

【问题讨论】:

    标签: html jsoup


    【解决方案1】:

    您的代码有几点需要注意:

    A)您无法获取跨度的文本,因为它首先没有文本:

    <div>Estimated Price: 
      <span class="cw-sprite rupee-medium"></span>
      5.50 - 7.50 lakhs
    </div>
    

    看到了吗?文本在 div 中,而不是 span!

    B) 你的选择器"&gt; div &gt; span[class=cw-sprite rupee-medium]" 不是很健壮。 HTML 中的类可以按任意顺序出现,所以两者都

    <span class="cw-sprite rupee-medium"></span>
    <span class="rupee-medium cw-sprite"></span>
    

    都是一样的。您的选择器只选择第一个。这就是为什么在 css 中有一个类语法,你应该使用它:

    "> div > span.cw-sprite.rupee-medium"
    

    如果你愿意,你可以先忽略他&gt;

    建议的解决方案

    Elements lcEl = doc.getElementsByClass("list_carousel").first();
    Elements spans = lcEl.select("span.cw-sprite.rupee-medium");
    for (Element span:spans){
      Element priceDiv = span.parent();
      System.out.println(priceDiv.getText());
    }
    

    【讨论】:

    • 非常感谢您。您的解决方案有效。我已经纠正了我的错误
    【解决方案2】:

    试试

    System.out.println(doc.select("#ucHome div:nth-child(3)").text());
    

    【讨论】:

    • 谢谢彼得,但我试过你的打印线。为什么要打印这个
      ?实际上这个 div 在
      里面
    • 你是对的,
      是最后一个孩子。如何选择第三个孩子peter?
    猜你喜欢
    • 1970-01-01
    • 2015-07-22
    • 2021-11-29
    • 2012-03-14
    • 2015-04-30
    • 2021-07-14
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    相关资源
    最近更新 更多