是的,您可以使用 jsoup 遍历 <li> 标记的子代。
这是您屏幕截图中 HTML 的简化版本,显示了 5 个元素:
<li>
<span class="foo"><img src="bar" class="img"></span>
<span class="bar">Collins</span>
<i class="baz1"><img src="baz1" class="img"></i>
<i class="baz2"><img src="baz2" class="img"></i>
<i class="baz3"><img src="baz3" class="img"></i>
</li>
假设您在文档中选择了这个特定的<li> 标签,您可以使用以下方法:
String html = "<li><span class=\"foo\"><img src=\"bar\" class=\"img\"></span><span class=\"bar\">Collins</span><i class=\"baz1\"><img src=\"baz1\" class=\"img\"></i><i class=\"baz2\"><img src=\"baz2\" class=\"img\"></i><i class=\"baz3\"><img src=\"baz3\" class=\"img\"></i></li>";
Document document = Jsoup.parse(html);
Element element = document.selectFirst("li");
element.children().forEach(child -> {
// do your processing here - this is just an example:
if (child.hasText()) {
System.out.println(child.text());
} else {
System.out.println(child.html());
}
});
以上代码打印如下输出:
<img src="bar" class="img">
Collins
<img src="baz1" class="img">
<img src="baz2" class="img">
<img src="baz3" class="img">
更新
如果起点是一个 URL,那么你需要从这个开始:
Document document = Jsoup.connect("https://www...").get();
接下来的练习是关于确定一种独特的方式来找到您的特定元素。因此,如果我们更新我之前的示例,假设您的网页是这样的:
<html>
<head>...</head>
<body>
<div>
<ul class="vList_4">
<li>
<span class="foo"><img src="bar" class="img"></span>
<span class="bar">Collins</span>
<i class="baz1"><img src="baz1" class="img"></i>
<i class="baz2"><img src="baz2" class="img"></i>
<i class="baz3"><img src="baz3" class="img"></i>
</li>
</ul>
</div>
</body
</html>
在这里,我们在 <ul> 标记中有一个名为 vList_4 的类。如果这是一个唯一的类名,我们可以使用它跳转到 HTML 页面的该部分(ID 比类名更好,因为它们保证是唯一的 - 但我在您的屏幕截图中没有看到任何 ID 名称)。
现在,代替我之前的选择器:
Element element = document.selectFirst("li");
我们可以使用这个更具体的选择器:
Element element = document.selectFirst("ul.vList_4 li");
将打印与以前相同的结果。
因此,您只需查看页面结构并弄清楚如何跳转到页面的相关部分。
请参阅此处以了解 technical details 描述如何构建选择器。