【问题标题】:Retrieving a span value in html using jsoup使用jsoup在html中检索跨度值
【发布时间】:2018-11-30 04:50:26
【问题描述】:

我正在尝试从下面 html 的 sn-p 中的“display-ratings”跨度类中检索数字“1”:

 <article class="surveys-verbatim__item ">
    <h3 id="engine_major">
        <a class="surveys-verbatim__item-title surveys-verbatim__item-title--font-large crux-body-copy crux-body-copy--bold" data-cr-collapse data-target=".surveys-verbatim__item" href="javascript:void(0);">
            Engine Major
            <span class="crux-icons crux-icons-caret-up-small surveys-verbatim__item__arrow"></span>
        </a>
    </h3>
    <div class="surveys-verbatim__item-body">
        <div class="row">
            <div class="col-sm-6 col-xs-12">
                <p class="crux-body-copy crux-body-copy--small surveys-verbatim__item-description">Engine rebuild or replacement, cylinder head, head gasket, turbo or supercharger, timing chain or timing belt.</p>
            </div>
                                <div class="col-md-offset-2 col-md-4 col-sm-offset-1 col-sm-5 col-xs-12">
                    <div class="surveys-verbatim__item-ratings">
                        <div class="brick-chart-chart-container">
    <div class="brick-chart-chart-wrapper-container clearfix">
<div class="brick-chart-chart-wrapper poor">
    <div class="brick-chart-brick"></div>
    <div class="brick-chart-brick active" style="width: 20%"></div>
</div>

<div class="score-range ">
                <span><span class="display-ratings">1</span> / 5</span>
        </div>
</div>
</div>
                    </div>
                </div>
                        </div>
                </div>
</article>

我在 Java 中使用 Jsoup,代码如下:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Main {

public static void main(String[] args) throws Exception {

    final Document document = Jsoup.connect("https://www.consumerreports.org/cars/audi/a6/2006/reliability?pagestop").get();
    for (Element element : document.select("article.surveys-verbatim__item")) {
        String rating = element.select("span.display-ratings").text();
        System.out.println(rating);
    }

  }
}

这会输出空白字符串。谁能告诉我他们是否知道如何提取跨度类“显示评级”中列出的值?

谢谢!

【问题讨论】:

  • 您确定页面会在调用您提供的 URL 时加载完整的 HTML 吗?我没有检查,但我假设此页面通过 AJAX 动态加载更多内容。所以最终 JavaScript 在浏览器中呈现页面。由于 JSoup 不是浏览器而只是解析器,因此它无法运行 JavaScript 来呈现页面。您可以尝试使用 selenium 或类似方法来获取 Java 中的内容。见seleniumhq.org/projects/webdriver

标签: java html jsoup


【解决方案1】:

您尝试提取的评分只有在您登录网站时才可见。 Jsoup 解析了 URL,但无法提取评级,因为它是隐藏的。

如果您想获得评分,则必须以编程方式登录网站并解析网页。

这是登录前的页面源截图。您可以看到评级被锁定在这里,即在这里不可见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    相关资源
    最近更新 更多