使用 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
基本上,我正在使用 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
表示:任何具有 classbar
的 HTML 元素,即<foo class="bar baz"></foo>
#bar
表示:任何具有 idbar
的 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