如何解决使用 JSoup 查找所有内部超链接
我正在尝试使用 JSoup 查找 URL 中的所有内部超链接。我使用了两种方法:DOM 和 CSS Selector。 DOM 方法提取的不仅仅是内部链接。 CSS Selector 方法不提取任何内容。我的源代码如下。
public static void main(String[] args) throws IOException {
Document doc = Jsoup.connect("https://stackoverflow.com/questions/2793150").get();
System.out.println("** Using selector syntax **");
extractUsingSelectorSyntax(doc);
System.out.println("\n\n");
System.out.println("** Using DOM methods **");
extractUsingDOMMethods(doc);
}
public static void extractUsingSelectorSyntax(Document doc) {
String selectorStr = "a[href^=#*]";
// Under anchor nodes select the value of the href attribute that starts with
// the '#' character,followed by 0 or more other characters
Elements anchors = doc.select(selectorStr);
for (Element link : anchors) {
String linkHref = link.attr("href");
String linkText = link.text();
System.out.println(linkText + " | " + linkHref);
}
}
public static void extractUsingDOMMethods(Document doc) {
Elements anchors = doc.getElementsByAttributeValueMatching("href","#*");
for (Element link : anchors) {
String linkHref = link.attr("href");
String linkText = link.text();
System.out.println(linkText + " | " + linkHref);
}
}
解决方法
您的 a[href^=#*]
选择器没有像您想象的那样工作。 Jsoup 将末尾的星号视为“正常”星号,而不是“任何字符”。
您应该省略它以获得一些输出 - a[href^=#]
.
如果你想使用正则表达式,你应该使用 `matches' 伪选择器:
:matches(regex):查找文本与指定正则表达式匹配的元素;例如div:matches((?i)login)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。