2017-08-05 9 views
2

私はJsoupを使ってウェブページからリンクを抽出していますが、imgリンクを避けたいと思います。 ので、次のコード:子供が特定のタグを含んでいない要素を選択しました

Document doc = Jsoup.connect(i_Url).userAgent("chrome/5.0").get(); 
Elements links = doc.select("a[href]"); 

は私にすべてのリンクを取得しますが、それらのいくつかはイメージです。やって次の要素の(=リンク)はimgタグを有するものであるので、

links.stream().filter(link -> !link.tagName().equals("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

使用次のセレクタ:私はそれが役に立てば幸い:)

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

a[href]:not(:has(img)) 

私は、次のユニットテストでそれをテストしているが、魔法のように動作します

関連する問題