Jsoup获取class内的href链接

8

我有这样一段需要解析的HTML代码:

<a class="sushi-restaurant" href="/greatSushi">城里最好吃的寿司</a>

我知道有一个jsoup的示例可以获取页面中的所有链接,例如:

Elements links = doc.select("a[href]");
for (Element link : links) {
print(" * a: <%s>  (%s)", link.attr("abs:href"),
trim(link.text(), 35));
}

但是我需要一段代码,可以返回给我这个特定类别的 href。

谢谢大家


<a class="sushi-place" href="/someurl">最佳寿司</a> 抱歉,此代码转换为“最佳寿司”。抱歉。 - Reza
2个回答

11

你可以通过类名选择元素。此示例查找具有类sushi-restaurant的元素,然后获取第一个结果的绝对URL。

确保在解析HTML时,指定基本URL(文档获取的位置),以允许jsoup确定链接的绝对URL。

public static void main(String[] args) {
    String html = "<a class=\"sushi-restaurant\" href=\"/greatSushi\">Best Sushi in town</a>";
    Document doc = Jsoup.parse(html, "http://example.com/");
    // find all <a class="sushi-restaurant">...
    Elements links = doc.select("a.sushi-restaurant");
    Element link = links.first();
    // 'abs:' makes "/greatsushi" = "http://example.com/greatsushi":
    String url = link.attr("abs:href");
    System.out.println("url = " + url);
}

简洁版:

String url = doc.select("a.sushi-restaurant").first().attr("abs:href");

希望这能有所帮助!


你的回答完全有道理,但是当我运行Elements links = doc.select("a.sushi-restaurant");时,我得到了null值,而且我知道sushi-restaurant类存在,因为当我运行getElementByClass("sushi-restaurant")时它可以工作。 - Reza
select()永远不会返回null,它可能返回0个元素,但绝不会是null。我已经更新了代码片段,并测试了正确打印URL的功能。你能测试一下并告诉我结果吗?使用的是jsoup 1.6.1版本。 - Jonathan Hedley
你是对的。我用错了类名。太棒了。非常感谢。 - Reza
1
如果类名中有空格,你会如何处理?例如:"sushi restaurant"。 "a.sushi restaurant" 可以吗? - Franklin

0
Elements links = doc.select("a");
for (Element link : links) {
String attribute=link.attr("class");
if(attribute.equalsIgnoreCase("sushi-place")){
print   link.href//You probably need this
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接