使用java中的JSoup解析没有ID的html表

时间:2014-01-22 11:06:40

标签: java html parsing jsoup

我正在尝试为研究项目处理大量数据。我的计算机上有许多html文件,我需要将一些信息读入java程序。

我使用Jsoup加载文档。

不幸的是,html中的表没有类或id(并且有多个表)。我搜索过堆栈,但我找到的所有答案都使用table.class。

我如何从下表中获取数据(18/01/2014)? doc.select现在不能正常工作,因为我认为缺少课程

I am trying something like this:

    Element table = doc.select("table").first();

            Iterator<Element> ite = table.select("td").iterator();

            ite.next(); 

            System.out.println("Value 1: " + ite.next().text());
            System.out.println("Value 2: " + ite.next().text());
            System.out.println("Value 3: " + ite.next().text());
            System.out.println("Value 4: " + ite.next().text());




<table border=0 cellpadding=0 cellspacing=0 width=650 height=18><tr><td class="header" style="color:#FFFFFF;"><table border=0 cellpadding=0 cellspacing=0><tr>
<td><img src="/images/title_ultratop.png"></td><td style="color:#FFFFFF;vertical-align:middle;"><b>50 DANCE<br> 
<a href="link"><img src="/images/arr_bw.png" border=0 style="margin-bottom:1px;margin-right:3px;"></a>18/01/2014
</b></td></tr></table>

- 修改

我发现桌子在另一张桌子里面。使用这段代码我可以得到它,但我现在只得到1行。就在桌子上,我需要从中获取一个元素。

 Element table = doc.select("table table").first();

            for (Element row : table.select("tr")) {
                    Elements tds = row.select("td");
                     System.out.println(tds.get(0).text());

            }

我想我现在正在显示整个表格。如何让我们说第二个元素?

2 个答案:

答案 0 :(得分:2)

你的html中存在一些问题。我想正确的是:

<table border="1" cellpadding="0" cellspacing="0" width="650" height="18">
    <tr>
        <td class="header" style="color:#FFFFFF;">
            <table border="1" cellpadding="0" cellspacing="0">
                <tr>
                    <td><img src="/images/title_ultratop.png"></td>
                    <td style="color:#FFFFFF;vertical-align:middle;">
                        <b>50 DANCE
                        <br>
                        <a href="link"><img src="/images/arr_bw.png" border="0"
                                            style="margin-bottom:1px;margin-right:3px;"></a>
                        18/01/2014
                        </b>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>

为了获得该节点,您必须选择:table table td b然后获取第4个子节点(文本节点):

    Elements td = doc.select("table table td b");
    TextNode el = (TextNode)td.first().childNode(4);
    System.out.println(el.text());

答案 1 :(得分:0)

是的,第三个嵌入式表并且可以工作。

元素表= doc.select(“table table”)。first();

还需要在网站上选择不同的表格。我读了关于table:contains(word)。希望能说出来!