使用jSoup从Android中的外部网站接收表格数据

时间:2013-02-26 19:47:41

标签: java android html html-table jsoup

在我的Android应用程序中,我想从外部网站接收一些表格数据。

让我们说网站页面X里面有这个表格的HTML:

<table summary="Foo" border="0" bgcolor="#ffffff" cellpadding="0"> </table>

我如何在表格第二列的所有单元格中(从上到下)收到字符串?

到目前为止,我所做的是以下内容:

  1. 创建AsyncTask

  2. 使用jSoup抓取外部网站。

  3. 我在AsyncTask中使用了以下代码:

    ArrayList<String> list = new ArrayList<String>(); //table data
    Document document = Jsoup.connect(url).get();
    Elements nextTurns = document.select(":contains(Foo) td:eq(1)");            
            for (Element nextTurn : nextTurns) {
                list.add(nextTurn.text());
            }
    

    当运行代码时,它似乎停在document.select语句处并且GC变得疯狂。经过很长一段时间后,它确实超过了document.select语句,它确实使大部分数据正确,但它仍然具有来自网站的随机其他元素。

    我很确定这是完全错误的:

    Elements nextTurns = document.select(":contains(Foo) td:eq(1)"); 
    

    但我不确定如何修复它,因为该表也没有任何ID。我发现this page令人困惑。

    如何修复select语句和/或for循环,以便用第二个表列中的数据填充ArrayList?

    编辑:删除contains(Foo)它现在非常快,因此减少了1个问题。我仍然需要帮助将DOM元素遍历到表的第二列,而不需要占用网站的一堆随机部分。

1 个答案:

答案 0 :(得分:1)

这是正确的选择,根据你的帖子进行猜测

document.select("table[summary=Foo] tr");

循环浏览上面的列表,并获取列表中索引1的第二个<td>