我使用Jsoup从网页中提取链接,但我想避免使用img链接。 所以下面的代码:
Document doc = Jsoup.connect(i_Url).userAgent("chrome/5.0").get();
Elements links = doc.select("a[href]");
将获取所有链接,但其中一些是图像。执行以下操作:
links.stream().filter(link -> !link.tagName().equals("img"));
无法工作,因为元素' s(= link)子是带有img标记的子元素,例如:
<a href="index.htm" title="tutorialspoint">
<img alt="tutorialspoint" src="/java/images/logo.png">
</a>
我尝试了各种各样的事情,例如:
Elements links = doc.select("a[href]").select(":not(img)"); //or
Elements links = doc.select("a[href]:not(img)"); //or
Elements links = doc.select("a[href]")
links.stream().filter(link -> link.children().contains(Tag.valueOf("img")));
我只是试着玩各种各样的变化,但都没有奏效。在html方面,我不是一个大专家。 帮助将不胜感激。感谢
答案 0 :(得分:5)
使用以下选择器:
a[href]:not(:has(img))
我刚刚通过以下单元测试对其进行了测试,就像一个魅力:
@Test
public void testParsingLinksWithoutImagesInside() {
//given:
String html = "<a href=\"index.htm\" title=\"tutorialspoint\">\n" +
" <img alt=\"tutorialspoint\" src=\"/java/images/logo.png\">\n" +
"</a>";
//when:
Document document = Jsoup.parse(html);
Elements elements = document.select("a[href]:not(:has(img))");
//then:
assertThat(elements.size()).isEqualTo(0);
}
我希望它有所帮助:)