使用 JSoup 从 div 获取所有链接

get all links from a div with JSoup

基本上,我正在使用 Jsoup 来解析一个站点,我想从以下 html 获取所有链接:

<ul class="detail-main-list">
  <li> 
    <a href="/manga/toki_wa/v01/c001/1.html" title="Toki wa... Vol.01 Ch.001 -Toki wa... target="_blank"> Dis Be the link</a>
   </li> 
</ul>

知道怎么做吗?

直接来自 jsoup.org,就在那里,您首先看到的是:

Document doc = Jsoup.connect("https://en.wikipedia.org/").get();
log(doc.title());
Elements newsHeadlines = doc.select("#mp-itn b a");
for (Element headline : newsHeadlines) {
  log("%s\n\t%s", 
    headline.attr("title"), headline.absUrl("href"));
}

将此修改为您需要的似乎微不足道:

Document doc = Jsoup.connect("https://en.wikipedia.org/").get();
Elements anchorTags = doc.select("ul.detail-main-list a");
for (Element anchorTag : anchorTags) {
  System.out.println("Links to: " + anchorTag.attr("href"));
  System.out.println("In absolute form: " + anchorTag.absUrl("href"));
  System.out.println("Text content: " + anchorTag.text());
}

ul.detail-main-list a 部分是所谓的选择器字符串。关于这些的真正的简短教程:

  • foo 表示:具有该标签名称的任何 HTML 元素,即 <foo></foo>.
  • .bar 表示:任何具有 class bar 的 HTML 元素,即 <foo class="bar baz"></foo>
  • #bar 表示:任何具有 id bar 的 HTML 元素,即 <foo id="bar">
  • 这些可以组合:ul.detail-main-list 匹配在其 classes 列表中具有字符串 detail-main-list 的任何 <ul> 标签。
  • a b 表示:所有与 'b' 选择相匹配的事物都具有与 'a' 相匹配的事物作为父项。所以 ul a 匹配所有 <a> 标签周围有 <ul> 标签。

JSoup docs非常优秀

您可以从任何网站以这种方式做一个特定的 href link。

public static void main(String[] args) {
    String htmlString = "<html>\n" +
            " <head></head>\n" +
            " <body>\n" +
            "<ul class=\"detail-main-list\">\n" +
            "  <li> \n" +
            "    <a href=\"/manga/toki_wa/v01/c001/1.html\" title=\"Toki wa... Vol.01 Ch.001 -Toki wa... target=\"_blank\"> Dis Be the link</a>\n" +
            "   </li> \n" +
            "</ul>" +
            " </body>\n" +
            "</html>"
            + "<head></head>";
    Document html = Jsoup.parse(htmlString);
    Elements elements = html.select("a");
    for(Element element: elements){
        System.out.println(element.attr("href"));
    }
}

输出:

/manga/toki_wa/v01/c001/1.html