我怀疑你会得到你正在寻找的东西只是复制粘贴。JSoup 是 HTML 解析器,您必须查找元素并编写相应的选择器以获取其内容。
如果您使用的是 Chrome,请右键单击元素(文本)并选择检查元素,一旦打开 HTML 源,请右键单击相应的元素并选择Copy CSS Path
。
对于 Country ( Land ),您将得到如下信息:
#mw-content-text > table.infobox.geography > tbody > tr:nth-child(5) > td > span > a
当然,这可以缩短,但它并不能提高性能,如果你对 CSS 不够了解,这将是一件痛苦的事情。
幸运的是,JSoup 支持 CSS 选择器,因此您在获取相应元素后可以执行以下操作:
String countrySelector = "#mw-content-text > table.infobox.geography > tbody > tr:nth-child(5) > td > span > a";
Document doc = Jsoup.connect("http://sv.wikipedia.org/wiki/Stockholm").get();
Element countryEl = doc.select(countrySelector).first();
System.out.println(countryEl.toString());
(我假设您提供的代码可以正常工作)
如果您想更快地测试选择器是否正确,您可以直接在 Chrome 中进行,一旦您复制了选择器,将选项卡更改为Console
,然后使用$("selector")
,然后按 Enter,例如:
$("#mw-content-text > table.infobox.geography > tbody > tr:nth-child(5) > td > span > a")
如果需要元素的文本内容,可以使用$("selector").text()
.
(你可能已经注意到这是一些简单的jQuery)
但请注意,如果 Wikipedia 决定更新其 DOM 布局,这可能很容易中断。
编辑:(在评论中附加解释后添加)
对于要在多个页面上工作的选择器,您可能希望使它们更通用。
要选择的第一件事是infobox
在右边,最好使用table.infobox
,但这可能仍然选择多个元素。您需要的信息通常在第一个信息框中,因此很容易使用.first()
. 如果这不起作用并且您找不到所需的元素,则可以创建后备以尝试在所有信息框元素中查找信息。
我仍然不确定你到底在追求什么,所以这是你在将上面放在一起时应该得到的代码:
// Set infobox selector (content on the right side of Wiki page)
String tableSelector = "table.infobox";
// Load document
Document doc = Jsoup.connect("http://en.wikipedia.org/wiki/Gothenburg").get();
// Select infobox element
Element infoboxEl = doc.select(tableSelector).first();
// Select all table rows inside infobox
Elements tableRows = infoboxEl.select("tr");
for (Element row: tableRows) {
// Output the title of each row
System.out.print(row.select("th").text() + ": ");
// Output conent for that title
System.out.println(row.select("td").text());
}
这是示例输出:
Gothenburg, Sweden Göteborg:
_: From left to right: View over Gothenburg and the Göta älv, Götaplatsen, Svenska Mässan, Gothenburg heritage tram, Elfsborg Fortress, Ullevi.
_: Nickname(s): Little London Little Amsterdam,
_: Gothenburg, Sweden
_: Coordinates: 57°42′N 11°58′E / 57.700°N 11.967°E / 57.700; 11.967Coordinates: 57°42′N 11°58′E / 57.700°N 11.967°E / 57.700; 11.967
Country: Sweden
Province: Västergötland and Bohuslän
County: Västra Götaland County
Municipality: Gothenburg Municipality, Härryda Municipality, Partille Municipality and Mölndal Municipality
Charter: 1621
Area[1]:
• City: 447.76 km2 (172.88 sq mi)
• Water: 14.5 km2 (5.6 sq mi) 3.2%
• Urban: 203.67 km2 (78.64 sq mi)
• Metro: 3,694.86 km2 (1,426.59 sq mi)
Elevation: 12 m (39 ft)
Population (2013 (urban: 2010))[1][2]:
• City: 533,260
• Density: 1,200/km2 (3,100/sq mi)
• Urban: 549,839
• Urban density: 2,700/km2 (7,000/sq mi)
• Metro: 956,118
• Metro density: 260/km2 (670/sq mi)
Demonym: Gothenburger (Göteborgare)
Time zone: CET (UTC+1)
• Summer (DST): CEST (UTC+2)
Postal code: 40xxx - 41xxx - 421xx - 427xx
Area code(s): (+46) 31
Website: www.goteborg.se
这会输出您在 wiki 上可以看到的所有内容,并且可能不是您想要的,因为在某些情况下缺少标题(标记为_:
)。但我想你知道它是如何工作的,你可以用它来过滤掉你正在寻找的东西。
我建议您使用类来保存这些数据并稍后在您的应用程序中显示它。通过这种方式,您可以轻松应用逻辑来检查您是否获得了所有正确的数据,如果失败,您可以创建一个后备来修复它。