Jsoup простой селектор кода нужна помощь, пожалуйста - PullRequest
0 голосов
/ 19 января 2012

Мне трудно получить нужную информацию из очень простого кода.

Например, у меня нет проблем со сбором данных в этом простом коде:

<HTML>
<TABLE>
<TABLE WIDTH=100%><TR class=FSS-data-row-highlight>
<TD>&nbsp;<A HREF="player.cgi?4686">Evgeni Malkin</A>, Pit (C/RW)</TD>
<TD class=FSS-data-right> 6 pts in last 2 GP&nbsp;</TD>
</TR>
</TABLE>
</TABLE>
</HTML>

Мне нужна строка «Evgeni Malkin 6 pts in last 2», которая прекрасно работает в этом коде. Но при подключении ко всей странице ничего не возвращается. Я думаю, это потому, что в таблицах есть таблицы, но я не могу понять, как действовать дальше. Вот мой код:

Document doc = Jsoup.connect("http://forecaster.thehockeynews.com/hockeynews/hockey/statistics.cgi?mlb&mode=hotnot/").get();
Elements scanYearplace = doc.select("tr.FSS-data-row-highlight td");
String yearplace = scanYearplace.text();

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

Есть предложения?

Заранее спасибо!

1 Ответ

0 голосов
/ 01 февраля 2012

--- см. Обновление ниже ---

Пожалуйста, имейте в виду, что это хрупкое решение, поскольку любое изменение сайта может привести к его поломке.Вы также хотите сделать некоторые проверки ошибок и еще много чего.Кроме того, я не видел текст «6 очков в последних 2 ГП», как у вас выше, но вы можете получить любую статистику, которую вы хотите, используя этот код.Просто замените stats.get(4) на любое значение.

    Document doc = Jsoup.connect("http://forecaster.thehockeynews.com/hockeynews/hockey/statistics.cgi?mlb&mode=hotnot/").get();

    for (Element e : doc.select(".FSS-data-row")) {
        Element td = e.select("td.FSS-data-left > a").first();
        String name = (td != null?td.text():null);
        Elements stats = e.select(".FSS-data-right");
        String goals = (stats.size() > 0?stats.get(4).text():null);
        System.out.println(name + ":" + goals);
    }

Пример вывода:

null:null
J. Benn:13
P. Sharp:20
P. Marleau:17
T. Oshie:14

Первый ноль: ноль, потому что это похоже на строку заголовка на странице.1010 *


----- ОБНОВЛЕНИЕ -----

URL, который вы указали в своем сообщении, указал на неправильную страницу.Вот обновленный код, чтобы получить то, что, я думаю, вы хотите ..

    Document doc = Jsoup.connect("http://forecaster.thehockeynews.com/hockeynews/hockey/statistics.cgi?&mode=hotnot").get();
    for (Element e : doc.select("tr.FSS-data-row-highlight")) {
        Element tdname = e.select("td > a").first();
        String name = (tdname != null?tdname.text():null);
        Element tdstat = e.select("td.FSS-data-right").first();
        String stat = tdstat.text();
        System.out.println(name + ":" + stat);
    }

Пример вывода:

Mathieu Perreault:5 pts in last 2 GP 
Mikhail Grabovski:5 pts in last 2 GP 
James Neal:4 pts in last 2 GP 
Kris Versteeg:4 pts in last 2 GP 
Evgeni Malkin:12 pts in last 6 GP 
...