【问题标题】:Jsoup select elements that their children do not contain a specific tagJsoup 选择子元素不包含特定标签的元素
【发布时间】:2018-06-30 11:58:16
【问题描述】:

我正在使用 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"));

不起作用,因为元素的 (=link) child 是带有 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 方面的专家。 帮助将不胜感激。谢谢

【问题讨论】:

    标签: java html jsoup


    【解决方案1】:

    使用以下选择器:

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

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 2011-04-20
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 2016-12-12
      相关资源
      最近更新 更多