【问题标题】:Select link in a table with jsoup using Java code使用 Java 代码选择带有 jsoup 的表中的链接
【发布时间】:2016-03-21 02:44:57
【问题描述】:

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

<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

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

【问题讨论】:

    标签: java hyperlink jsoup html-table


    【解决方案1】:

    只需选择所有锚标记,然后获取 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。

    【讨论】:

    • 是的,如果文档中只有一个这样的表格,那就可以了。
    • 您发布的文档中只有一个表格。
    • 我没有发布任何表格 :) 但你是对的,总是很难猜测需要包含这样的 CSS 查询的哪些部分才能足够具体。我认为 OP 从您的回答中得到了这个想法,这就是我投票的原因。
    • 对不起。今天早上我的第一杯咖啡。仍然没有完全启动。是的,很难正确解析 html,尤其是当没有明确定义的方法来识别您要查找的内容时。
    【解决方案2】:

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

    你可以这样做:

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

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 2011-11-10
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多