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
我希望创建一个提交 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