使用JSoup查找所有内部超链接



我试图使用JSoup查找URL内的所有内部超链接。我使用了两种方法:DOM和CSS选择器。DOM方法提取的不仅仅是内部链接。CSS选择器方法不提取任何东西。我的源代码如下:

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("nn");

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^=#]
如果你想使用regex,你应该使用' matches'伪选择器:

:matches(regex):查找文本与指定正则表达式匹配的元素;如div:匹配((?我)登录)

最新更新