【问题标题】:Iterating through elements in jsoup and parsing href遍历jsoup中的元素并解析href
【发布时间】:2016-07-11 09:47:25
【问题描述】:

我无法从一行表数据中获取 href。虽然我能够让它工作,但我想知道是否有人解释我的代码为什么在这里工作。

for (Element element : result.select("tr")) {
    if (element.select("tr.header.left").isEmpty()) {

        Elements tds = element.select("td");

        //The line below is what I don't understand
        String link = tds.get(0).getElementsByAttribute("href").first().attr("href");

        String position = tds.get(1).text();
     }
}

我之前使用的那行不起作用,如下:

String link = tds.get(0).attr("href");

为什么这行返回一个空字符串?我假设它与我如何通过“tr”选择的元素进行迭代有关。但是,我不熟悉 Elements vs Element 的结构。

感谢您的帮助!

【问题讨论】:

    标签: java html jsoup href


    【解决方案1】:

    Elements 只是一个ArrayList<Element>

    您必须编写额外代码的原因是因为<td> 没有href 属性,所以tds.get(0).attr("href"); 将不起作用。您可能正试图从单元格内的<a> 捕获href。更长的工作代码是:

    对于行中的第一个单元格,获取具有@href 属性的第一个元素(即链接),并获取 它的 @href 属性

    尝试以下示例(带有示例文档)以更清楚地展示如何访问子链接:

    Element result = Jsoup.parse("<html><body><table><tr><td><a href=\"http://a.com\" /</td><td>Label1</td></tr><tr><td><a href=\"http://b.com\" /></td><td>Label2</td></tr></table></body></html>");
    
    for (Element element : result.select("tr")) {
        if (element.select("tr.header.left").isEmpty()) {
    
            Elements tds = element.select("td");
    
            String link = tds.get(0).getElementsByTag("a").attr("href");
            String position = tds.get(1).text();
    
            System.out.println(link + ", " + position);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 2023-03-18
      • 2023-03-29
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      相关资源
      最近更新 更多