说我有这个HTML:
<!-- some comment -->
<div class="someDiv">
... other html
</div>
<!-- some comment 2 -->
<div class="someDiv">
... other html
</div>
我目前正在获取class == someDiv的所有div并抓取它们以获取信息。要做到这一点,我只是这样做:
Document doc = Jsoup.connect(url).get();
Elements elements = doc.select(".someDiv");
for (Element element : elements) {
//scrape stuff
}
在for循环中,有没有办法在我所在的特定div.someDiv元素之前找到注释标记?
如果无法做到这一点,我是否应该根据此要求以不同方式解析此html结构?
感谢您的任何建议。
答案 0 :(得分:3)
虽然这个问题已经有几个月了,但我的答案是完整的。如何使用previousSibling
获取前面的Node
。当然,在您可能想要检查的实际代码中,是否真的在那里得到Comment
。
String html = "<!-- some comment --><div class=\"someDiv\">... other html</div><!-- some comment 2 --><div class=\"someDiv\">... other html</div>";
Document doc = Jsoup.parseBodyFragment(html);
Elements elements = doc.select(".someDiv");
for (Element element : elements) {
System.out.println(((Comment) element.previousSibling()).getData());
}
这会产生:
some comment
some comment 2
(使用jsoup 1.6.1和1.6.3测试)
答案 1 :(得分:2)
尝试这样的事情,迭代所有评论并检查他们的兄弟是否是你所追求的div
for (int i = 0; i < doc.childNodes().size(); i++) {
Node child = doc.childNode(i);
if (child.nodeName().equals("#comment")) {
//do some checking on child.nextSibling() , like hasAttr or attr to figure out if it the div you were expecting for...
}
}
答案 2 :(得分:0)
元素元素= doc.select(“div.someDiv”);