Разбор HTML-таблиц с помощью jsoup - PullRequest
1 голос
/ 27 мая 2019

Я анализирую таблицы, используя jsoup. Мне нужно подключиться к таблицам деления с этого сайта: https://www.basketball -reference.com / leagues / NBA_2006.html . Не знаю, как анализировать таблицы, потому что мне нужно использовать один и тот же метод для каждой постоянной таблицы деления, но идентификатор отличается для более старых сезонов (например, id="divs_standings_W", "id="divs_standings_E" и "id="divs_standings_"). Ссылка на какой-то более старый сезон: https://www.basketball -reference.com / league / NBA_1950.html .

Как я могу проверить, существует ли таблица с данным идентификатором и если она существует, поместить ее в таблицу переменных? Не иметь много соответствующего кода.

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

1 Ответ

1 голос
/ 27 мая 2019

Вы можете просто использовать соответствие префикса .Используйте table[id^="divs_standings_"].Это будет соответствовать всем таблицам, с идентификаторами, начинающимися с 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);
}

и вызовите его с обоими URL:

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

Вы также можете использовать сопоставление с образцом, если у вас есть более сложные идентификаторы.Проверьте ссылку выше для этого.

...