使用jsoup解析html表

时间:2019-05-27 15:03:55

标签: java html parsing web-scraping jsoup

我正在使用jsoup解析表。我需要从以下网站连接到部门常规表:https://www.basketball-reference.com/leagues/NBA_2006.html。不知道如何解析表格,因为我需要为每个部门站立表格使用相同的方法,但是对于较旧的季节(例如id="divs_standings_W""id="divs_standings_E""id="divs_standings_",id是不同的。链接到较旧的季节:https://www.basketball-reference.com/leagues/NBA_1950.html

如何检查具有给定id的表是否存在并将其放在变量表中?没有太多相关代码。

Document doc = Jsoup.connect("https://www.basketball-reference.com/leagues/NBA_1950.html").get();
Elements table = doc.select("table[id=\"divs_standings_\"]");

1 个答案:

答案 0 :(得分:1)

您可以只使用prefix matching。使用table[id^="divs_standings_"]。这将匹配所有表,其ID以divs_standings_开头:

Document doc = Jsoup.connect("https://www.basketball-reference.com/leagues/NBA_1950.html").get();
Element table = doc.selectFirst("table[id^=\"divs_standings_\"]");

这将适用于新旧季节。

要将其包装在方法中,您可以使用类似以下的内容:

private static void processTable(String url) throws IOException {
    Document doc = Jsoup.connect(url).get();
    Element table = doc.selectFirst("table[id^=\"divs_standings_\"]");
    System.out.println(table);
}

并使用两个网址调用它:

processTable("https://www.basketball-reference.com/leagues/NBA_1950.html");
processTable("https://www.basketball-reference.com/leagues/NBA_2006.html");

如果您具有更复杂的ID,也可以使用模式匹配。查看上面的链接。