使用Java代码在jsoup的表中选择链接

时间:2015-12-15 10:42:04

标签: java hyperlink jsoup html-table

我需要在此表中获取下载链接:

<table cellpadding="0" cellspacing="3" border="0">
<tr>
<td><img class="img" src="...path" /></td>
<td><a href="the file I want to download">File</a> - 
<a id="1569" class="tepLink" href="javascript:void(0);">[Click me]</a>
</td>
</tr>
</table>

这就是我试过的:

Element table = doc.select("table[cellpadding=\"0\" cellspacing=\"3\" border=\"0\"]").first();
Element dwlLink = table.select("td:has(a)").first();
String absPath = dwlLink.attr("abs:href");
//use download manager to download from string absPath

我总是得到一个“空对象引用”,所以我一定错了代码,应该怎么做?

2 个答案:

答案 0 :(得分:2)

只需选择所有锚标签,然后获取Elements对象中的第一个元素。

    Elements anchorTags = doc.select("table[cellpadding=0][cellspacing=3][border=0] a");
    if(anchorTags.isEmpty())
    {
        System.out.println("Not found");
    }
    else
    {
        System.out.println(anchorTags.first());
    }

编辑:

我更改了select方法以包含cellpadding,cellspacing和border属性,因为这看起来就像你在其中一个例子中所做的那样。

此外,如果Elements列表为空,则Element.first()方法返回null。调用该方法时始终检查null以防止NullPointerExceptions。

答案 1 :(得分:0)

table.select("td:has(a)").first();将选择包含锚点的第一个<tr>元素。它不会选择锚<a>本身。

这是你可以做的:

Element aEl = doc.select("table[cellpadding] td a").first();