如何使用Jsoup从链接中提取href细节?

时间:2015-01-10 08:44:41

标签: java html parsing jsoup

我有一个这种形式的HTML:

 <table> 
               <tbody>
                <tr> 
                 <td class="t1"><a href="/click/site1" target="_blank" rel="nofollow"><img class="png" src="" alt="site1"></a></td> 
                 <td class="t2 up"><a href="/click/site1" target="_blank" rel="nofollow">INFORMATION</a></td> 
                 <td class="t2 down"><a href="/click/site1" target="_blank" rel="nofollow">INFORMATION</a></td> 
                 <td class="t2 up mark"><a href="/click/site1" target="_blank" rel="nofollow">INFORMATION</a></td> 
                </tr>
                <tr> 
                 <td class="t1"><a href="/click/site2" target="_blank" rel="nofollow"><img class="png" src="" alt="site2"></a></td> 
                 <td class="t2 down"><a href="/click/site2" target="_blank" rel="nofollow">INFORMATION</a></td> 
                 <td class="t2 stable"><a href="/click/site2" target="_blank" rel="nofollow">INFORMATION</a></td> 
                 <td class="t2 up"><a href="/click/site2" target="_blank" rel="nofollow">INFORMATION</a></td> 
                </tr>
                 .
                 . 
                 .
              </tbody> 
 </table>

我要提取或者href(/ click / site1)的值或alt(site1)的值。 我怎么能用Jsoup做到这一点? THX

编辑: 这是我写的代码:

for(Element table : doc.select("table"))
        {

            for(Element row : table.select("tr"))
            {
                System.out.print(table.attr("href").toString());
                Elements column = row.select("td");
                {
                System.out.println(column.text());
                }
            }
            System.out.println();
        }

但此行System.out.print(table.attr("href").toString());不会打印任何内容

1 个答案:

答案 0 :(得分:2)

这个过程在jsoup cookbook中有描述。

http://jsoup.org/cookbook/extracting-data/working-with-urls

Document doc = Jsoup.connect("http://jsoup.org").get();

Element link = doc.select("a").first();
String relHref = link.attr("href"); // == "/"
String absHref = link.attr("abs:href"); // "http://jsoup.org/"

在您的问题中,您尝试从表中获取属性href但该表没有href属性。您可以搜索所有标签,也可以选择行内的td,然后选择其中的链接。

是否有一些编码添加改变了您的示例并添加了一些代码以仅编写链接。

for(Element table : doc.select("table")) {
    for(Element row : table.select("tr")) {
        Elements column = row.select("td");
        Elements atag = column.get(0).select("a");
        System.out.print(atag.get(0).attr("href").toString());
        System.out.print(" ");
        System.out.println(column.text());
    }
    System.out.println();
}

for(Element link : doc.select("a")) {
    System.out.println(link.attr("href")); // == "/"
}