java - 如何使用java和jsoup从页面源获取数据

标签 java html css jsoup

如何从 $23,000,000$47,351,251 以下页面来源? 我只想从源代码中获取这些值,但不确定最佳方法。

  <div class="txt-block">
            <h4 class="inline">Budget:</h4>$23,000,000
            <span class="attribute">(estimated)</span>
        </div>

        <div class="txt-block">
            <h4 class="inline">Opening Weekend USA:</h4> $260,382,
<span class="attribute">20 December 2013</span>, <span class="attribute">Limited Release</span>
        </div>

        <div class="txt-block">
<h4 class="inline">Gross USA:</h4> $25,568,251
        </div>
        <div class="txt-block">
<h4 class="inline">Cumulative Worldwide Gross:</h4> $47,351,251
        </div>

我试过这样的:

    String url = "https://www.imdb.com/title/tt1798709";
    Connection connection = Jsoup.connect(url);
    Document document = connection.get();
    Elements element = document.getElementsByClass("txt-block");


    String gross = "";
    String budget = "";

    String budgetRegex = "Budget:.*";
    String grossRegex = "Cumulative Worldwide Gross:.*";

    for (Element e : element) {
        if (e.text().matches(budgetRegex)) {
            String text = e.text();
            budget = StringUtils.substringBetween(text, "$", " ");
            break;
        } else {
            budget = null;
        }
    }
    for (Element e : element) {
        if (e.text().matches(grossRegex)) {
            String text = e.text();
            gross = StringUtils.substringAfter(text, "$");
                break;
        } else {
            gross = null;
        }

    }
    System.out.println(gross + ", " + budget);

它的工作,但有更好的解决方案吗?

最佳答案

使用 ownText() 而不是 substring 并且只循环一次,而不是两次。试试这个:

    String url = "https://www.imdb.com/title/tt1798709";
    Connection connection = Jsoup.connect(url);
    Document document = connection.get();
    Elements elements = document.select("div.txt-block");

    String gross = "";
    String budget = "";

    final String budgetRegex = "Budget:";
    final String grossRegex = "Cumulative Worldwide Gross:";

    for (Element e : elements) {
        final String h4Text = e.getElementsByTag("h4").first().text();
        switch (h4Text) {
            case budgetRegex:
                budget = e.ownText();
                break;
            case grossRegex:
                gross = e.ownText();
                break;
        }
        if (!gross.isEmpty() && !budget.isEmpty()) { //this IF is optional, just added for performance
            break;
        }
    }
    System.out.println(gross + ", " + budget);

关于java - 如何使用java和jsoup从页面源获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51383327/

相关文章:

java - Java 中 Google Chrome 和 Mozilla 的导出书签 HTML 文件的解析器

javascript - 如何在 Google Chrome 的 HTML 页面中管理多个 AJAX 调用的加载?

javascript - 如何限制div的旋转 Angular

java - Dagger 在 Android 应用程序中生成重复的 `XXXDialogFragment_MembersInjector` 类(程序类型已存在)

javascript - Angular JS 中用于 IP 地址验证的 ng-pattern

java - 套接字上并发读写的线程安全

jquery - 如何在 CSS 中调整 div 框的大小,使文本无论长度如何都居中

html - css 网格元素上的粘性位置

Java:构建成功但输出为 "user_package.Point@68e26d2e"

java - JPA 的错误(每次执行后转储数据库)?