麻烦从java中的html表获取信息

时间:2016-10-24 20:51:13

标签: java android jsoup

我想从本网站的第一张表中获取信息 Link

这是我的代码

Document document = Jsoup.parse(DownloadPage("http://www.transtejo.pt/clientes/horarios" +
            "-ligacoes-fluviais/ligacao-barreiro-terreiro-do-paco/#dias-uteis"));

    Elements table = document.select("table.easy-table-creator:nth-child(1) tbody");
    Elements trAll = table.select("tr");

    //For the Table Hour
    Elements tr_first = table.select("tr:nth-child(1)");
    Element tr = tr_first.get(1);
    Elements td = tr.getElementsByTag("td");
    for(int i = 0; i < td.size(); i++) {
        Log.d("TIME TABLE:"," " + td.get(i).text());

        for(int i1 = 1; i1 < trAll.size(); i1++) {

            Elements td_inside = trAll.get(i1).getElementsByTag("td");
            Log.d("TD INSIDE:"," " + td_inside.get(i).text());


        }



    }

现在我能够获取信息,问题就是我从其他表中获取内容,因为所有表类名都相同而且我无法指定我需要的表,而且我也得到了IndexOutOfBoundsException

这是它的日志 Loglink

日志的类型我希望它是这样的: 小时(时间表),然后在这个小时,我想得到所有底线与该小时的分钟(TD INSIDE),然后移动到下一个小时(...)

渴望你的时间。

[编辑] 更好的日志示例 检查第一张表。

TIME TABLE: 05H
TD INSIDE: 15
TD INSIDE: 45
TIME TABLE: 06H
TD INSIDE: 15
TD INSIDE: 35
TD INSIDE: 45
TD INSIDE: 55
TIME TABLE: 07H
TD INSIDE: 05
TD INSIDE: 15
TD INSIDE: 20
TD INSIDE: 25
TD INSIDE: 35
TD INSIDE: 40
TD INSIDE: 50
TD INSIDE: 55

(...)

1 个答案:

答案 0 :(得分:1)

你可以这样做:

Element table = document
  .select("table.easy-table-creator:nth-child(1) tbody").first();
Elements trAll = table.select("tr");
Elements trAllBody = table.select("tr:not(:first-child)");

// For the Table Hour
Element trFirst = trAll.first();
Elements tds = trFirst.select("td");
for(int i = 0; i < tds.size(); i++){
    Element td = tds.get(i);
    Log.d("TIME TABLE:", " " + td.text());

    String query = "td:nth-child(" + (i + 1) + ")";
    Elements subTds = trAllBody.select(query);
    for (int j = 0; j < subTds.size(); j++) {
        Element subTd = subTds.get(j);
        String tdText = subTd.text();
        if(!tdText.isEmpty()){                  
            Log.d("TD INSIDE:", " " + subTd.text());
        }
    }
}

一些有趣的观点:

  • 您的table.easy-table-creator:nth-child(1) tbody选择器正在选择页面中的所有表格;
  • 通过累进式选择,您可以检索给定列中的所有tdtd:nth-child(index);
  • trAllBody此处包含不是第一个tr的所有tr:not(:first-child)(使用 If(isset($_POST['cost_value']) && !empty($_POST['cost_value']){ 选择器)。