Jsoup选择其子元素不包含特定标记的元素

时间:2017-08-05 21:01:48

标签: java html jsoup

我使用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方面,我不是一个大专家。 帮助将不胜感激。感谢

1 个答案:

答案 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);
}

我希望它有所帮助:)

相关问题