JSOUP Java 网页抓取/解析

JSOUP Java Web Scraping / Parsing

我希望创建一个提交 1 link 的程序,并从中提取某些特征 link(即下载计数、点赞计数等)。我可以很好地提取这些,因为它们只是 headers。但我不明白如何在另一个 link 中提取 link 的标题。举个例子,如果我输入 google.com 我希望提取标题 "Show X amount of results found",这是另一个 link,但 X 不是静态的(即 [=25= 的标题] 不是静态的,它会根据结果的数量而变化(在我的例子中,运行))

为了更好地解释我的代码是:

import org.jsoup.Jsoup;


public static void main(String[] args) throws Exception {
    String url = "https://www.openml.org/t/31";
    Document document = Jsoup.connect(url).get();

   // String question = document.select("#question .post-text").text();
   // System.out.println("Question: " + question);

    Elements title = document.select("div#subtitle");
    System.out.println("Title:  " + title.text()); 

    Elements downloadcount = document.select("span#downloadcount");
                System.out.println(downloadcount.text());

    Elements likecount = document.select("span#likecount");
                System.out.println(likecount.text());

    Elements nr_of_issues = document.select("span#nr_of_issues");
                System.out.println(nr_of_issues.text());      

    String runs = ("<i class=\"fa fa-star\"></i> <a href=\"#taskruns\" data-toggle=\"tab\">396900 runs submitted</a>");
    Document number = Jsoup.parse(runs);

            Element link = number.select("a").first();
            String linkText = number.text();
            System.out.println(linkText);
        }
 }

标题、下载次数、喜欢次数和 nr_of_issues 工作正常,因为它们不是 link。只是 "runs" 不起作用。我无法实现字符串作为 HTML 代码运行,因为它总是在变化(as you can see right now its at 396900,但如果明天它变为 400000 怎么办?)

根据我对 OP 的评论,您可以看到我们要引用的文本是 not 静态的,但它上面有一个元素,它有一个 id="detail".

我们需要引用父元素,然后从中获取子元素,假设子元素始终作为第一个子元素的子元素 div(希望盗梦空间不是一部令人困惑的电影).

以下是我们在 Java 中的做法:

public static void main(String[] args) throws Exception {
    String url = "https://www.openml.org/t/31";
    Document doc = Jsoup.connect(url).get();

    Element parentElement = doc.select("div#detail").first();
    Elements h2Element = parentElement.child(1).select("h2");
    System.out.println(h2Element.text());
}

运行 以上 Java 将打印:

396928 Runs