2

私がこの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構造を解析する必要がありますか?

アドバイスありがとうございます。

4

3 に答える 3

4

この質問は数か月前のものですが、完全を期すための私の答えです。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 でテスト済み)

于 2012-08-16T12:36:44.147 に答える
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...
        }
}

jsoup Node docsを見てください

于 2012-06-27T06:31:21.833 に答える
0

要素elements=doc.select( "div.someDiv");

http://jsoup.org/cookbook/

于 2012-06-27T06:02:23.820 に答える