【问题标题】:Jsoup not parsing data from tableJsoup不解析表中的数据
【发布时间】:2016-01-12 09:35:24
【问题描述】:

我正在尝试抓取此网页 http://www.skysports.com/football/competitions/la-liga/table.I 只是想从表格中获取团队的名称。我为此目的使用 Jsoup。这是我的代码

private class LoadData extends AsyncTask<Void,Void,Void> {
    String url = "http://www.skysports.com/football/competitions/la-liga/table";
    String data = "";

    @Override
    protected Void doInBackground(Void... params) {
        Document document;
        try {
            document = Jsoup.connect(url).timeout(0).get();
            Elements clubName = document.select("td.standing-table__cell standing-table__cell--name");
            int a = clubName.size();
            for(int i = 0; i < a; i++) {
                data += "\n\n" +clubName.get(i).text();

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        teamview = (TextView) findViewById(R.id.club_view);
        teamview.setMovementMethod(new ScrollingMovementMethod());
        teamview.setText(data);
        super.onPostExecute(result);
    }
}

这是它的 html 代码

    <tr class="standing-table__row" data-item-id="872">
  <td class="standing-table__cell">1</td>
  <td class="standing-table__cell standing-table__cell--name" data-short-name="Atletico Madrid" data-long-name="Atletico Madrid">

            <a href="/football/teams/atletico-madrid" class="standing-table__cell--name-link">Atletico Madrid</a>

  </td>
  <td class="standing-table__cell">19</td>
  <td class="standing-table__cell is-hidden--bp35">14</td>
  <td class="standing-table__cell is-hidden--bp35">2</td>
  <td class="standing-table__cell is-hidden--bp35">3</td>
  <td class="standing-table__cell is-hidden--bp35">27</td>
  <td class="standing-table__cell is-hidden--bp35">8</td>
  <td class="standing-table__cell">19</td>
  <td class="standing-table__cell" data-sort-value="1">44</td>
  <td class="standing-table__cell is-hidden--bp15 is-hidden--bp35 " data-sort-value="15333033">
          <div class="standing-table__form">
      <span title="Granada 0-2 Atletico Madrid" class="standing-table__form-cell standing-table__form-cell--win"> </span><span title="Atletico Madrid 2-1 Athletic Bilbao" class="standing-table__form-cell standing-table__form-cell--win"> </span><span title="Malaga 1-0 Atletico Madrid" class="standing-table__form-cell standing-table__form-cell--loss"> </span><span title="Rayo Vallecano 0-2 Atletico Madrid" class="standing-table__form-cell standing-table__form-cell--win"> </span><span title="Atletico Madrid 1-0 Levante" class="standing-table__form-cell standing-table__form-cell--win"> </span><span title="Celta Vigo 0-2 Atletico Madrid" class="standing-table__form-cell standing-table__form-cell--win"> </span>        </div>
        </td>

</tr>

当我使用代码document.select("td.standing-table__cell"); 时,会显示数据。但是当我使用document.select("td.standing-table__cell standing-table__cell--name"); 而不是document.select("td.standing-table__cell"); 时,没有显示任何数据!?

【问题讨论】:

标签: java android web-scraping jsoup


【解决方案1】:

选择器document.select("td.standing-table__cell standing-table__cell--name"); 将选择标签名称为standing-table__cell--name 的所有元素,并且这些元素是类名为standing-table__cell 的td 元素的(间接)子元素。不存在这样的元素,因此 Jsoup 返回一个空列表。

您可能想要选择具有standing-table__cellstanding-table__cell--name 两个类的td 元素。这可以通过这样的 CSS 选择器来完成:

 document.select("td.standing-table__cell.standing-table__cell--name");

注意:类名后面的点是类的 CSS 选择器。它们可以连接起来。

【讨论】:

  • 感谢您的信息,伙计。欣赏它。
【解决方案2】:

下面的代码循环遍历表格的每一行。然后它根据 css 类名称打印出俱乐部的名称,该名称位于 for 循环所在的表的行中。

    String url = "http://www.skysports.com/football/competitions/la-liga/table";
    try {
        Document document = Jsoup.connect(url).timeout(0).get();
        Elements clubRow = document.select("tr.standing-table__row");
        for(Element club: clubRow) {
            System.out.println(club.select("a.standing-table__cell--name-link").text());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

【讨论】:

  • 我明白了。谢谢,伙计。
猜你喜欢
  • 2014-03-01
  • 2020-06-19
  • 1970-01-01
  • 2019-06-04
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
相关资源
最近更新 更多