JSoup如何提取p标签内带image-holder类子元素的a标签href属性
解决方案
你可以直接使用JSoup内置的:has()伪类选择器实现需求,它可以筛选出包含指定子元素的父元素,修改后的代码如下:
try { Document doc = Jsoup.connect("https://urltoextractfrom.com").get(); // 选择器说明:p标签下的带href属性的a标签,且a标签有直接子元素span类名为image-holder Elements selections = doc.select("p a[href]:has(> span.image-holder)"); for (Element aTag : selections) { // 直接提取href属性值 String targetUrl = aTag.attr("href"); System.out.println(targetUrl); } } catch (Exception e) { e.printStackTrace(); }
选择器说明
p:限定父元素为p标签a[href]:筛选p标签下所有带有href属性的a标签:has(> span.image-holder):对筛选出的a标签做二次过滤,仅保留直接子元素中存在class为image-holder的span的a标签,>用于限定span是a的直接子元素,避免匹配到嵌套更深的span元素,完全符合需求。
如果需要对提取到的URL去重,可以用HashSet存储结果:
Set<String> urlSet = new HashSet<>(); for (Element aTag : selections) { urlSet.add(aTag.attr("href")); } // 遍历去重后的URL for (String url : urlSet) { System.out.println(url); }
内容的提问来源于stack exchange,提问作者WHOATEMYNOODLES
相关产品推荐
相关产品推荐

