如何从 $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/