2017-08-05 83 views
2

我使用Jsoup从网页中提取链接,但我想避免img链接。 所以下面的代码:Jsoup选择他们的孩子不包含特定标签的元素

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

不会起作用,因为该元素的(=链接)孩子是一个与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,我不是一个大专家。 帮助,将不胜感激。由于

回答

2

使用以下选择:

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

我希望它能帮助:)