Jsoup简单选择器代码请帮助

时间:2012-01-19 02:54:09

标签: selector jsoup

我很难从非常简单的代码中获取所需信息。

例如,我在这个简单的代码中收集数据没有问题:

<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>

我需要的是'最后2'中的'Evgeni Malkin 6分'字符串在该代码中正常工作。但是当连接到整个页面时,它什么都不返回。我想这是因为表中有表,但我无法弄清楚如何继续。这是我的代码:

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 :(得分:0)

---见下面的更新---

请注意,这一点很脆弱,因为对网站的任何更改都可能会破坏这一点。你还想做一些错误检查和诸如此类的东西。另外,我没有像上面那样看到“最后2个GP中的6个点”文本,但你可以使用这个代码获取你想要的任何统计数据。只需将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

第一个null:null是因为它就像页面上的标题行。


----- ----- UPDATE

您帖子中的网址指向错误的网页。这是更新的代码,以获得我认为你想要的..

    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