Jsoup,解析html表

时间:2015-06-03 10:31:34

标签: java web-scraping html-table jsoup

这可能是一个愚蠢的问题,但我无法弄明白。我试图解析来自页面的html输出:http://meteo.uwb.edu.pl/

所以基本上我需要从表中提取值,从左侧(蓝色文本)作为键(标题)和从右侧(棕色文本)作为值。另外,标题标签(" Aktualna pogoda /天气条件:")

我的目的是从html输出中获取html表然后解析它的行,但是我无法弄明白,因为html输出相当复杂。我从它开始:

doc = Jsoup.connect("http://meteo.uwb.edu.pl/").get();
Elements tables = doc.select("table");
for (Element row : table.select("tr"))
{
  Elements tds = row.select("td:not([rowspan])");
  System.out.println(tds.get(0).text() + "->" + tds.get(1).text());
}

但我的结果仍然是一团糟。您对如何正确解析它有什么想法吗?

2 个答案:

答案 0 :(得分:2)

此代码可以检索第一个表中的密钥数据:

doc.select("table").get(1).select("tbody").get(1).select("tr").get(1).select("td").get(0).select("b")

和价值:

doc.select("table").get(1).select("tbody").get(1).select("tr").get(1).select("td").get(1).select("b")
第二张表

doc.select("table").get(2).select("tbody").get(0).select("tr").get(1).select("td").get(0).select("b")

doc.select("table").get(2).select("tbody").get(0).select("tr").get(1).select("td").get(1).select("b")

答案 1 :(得分:0)

我用这种方式管理它:

 doc = Jsoup.connect("http://meteo.uwb.edu.pl/").get();
 Elements tables = doc.select("td");
 Elements headers = tables.get(2).select("b");
 Elements vals = tables.get(3).select("b");
 Map all = new HashMap();

 for (int i=0;i<headers.size() ; i++) all.put(headers.get(i).text(),vals.get(i).text());

似乎没问题。