ああ。その HTML を扱うのは簡単ではありません。おそらくスクレイピングを行っていると思いますので、これが私たちが扱っている多くのものであることを理解しています。あなたはこのjsoupにタグを付けたので、私はそれを突き刺します。通常、このような構造化されていない HTML を操作するためのセレクターはありません。できることは、最初の h2 の次の兄弟をすべて選択してから、2 番目の h2 の次の兄弟をすべて削除することです。さらに厄介なことに、セクション ヘッダーはテキスト コンテンツでしか識別できないため、:contains
セレクターを使用する必要があります。このような:
Document doc = Jsoup.connect("http://wikitravel.org/en/San_Francisco").get();
//select all "next siblings" of the "Get around" h2
Elements section = doc.select("h2:contains(Get around) ~ *");
//select all "next siblings" of the "See" h2 and remove them
section.select("h2:contains(See) ~ *").remove();
//remove the second h2
section.select("h2").remove();
//section now contains the elements between "Get around" and "See"
String sectionHtml = section.html();
jQuery で同じことを行った後の Firebug の出力を次に示します。最初のセレクターは、これらの Element を含む Elements オブジェクトを返しました。
[h3, p, p, p, p, h3, p, p, p, h3, div.thumb, div.thumb, p, ul, p, p, p, p, p, p, p, div.thumb, ul, ul, div.thumb, ul, ul, p, ul, ul, h3, p, p, p, h3, p, p, p, h3, p, p, p, p, p, p, h2, p, p, ul, ul, ul, h3, p, ul, h3, div.thumb, p, p, p, h3, div.thumb, p, p, p, p, p, h3, p, p, p, p, h3, div.thumb, p, p, p, p, p, h2, h3, div.thumb, p, p, p, p, p, ul, h3, div.thumb, ul, ul, ul, ul, ul, h3, p, h4, ul, h4, ul, h4, p, ul, h4, ul, h3, div.thumb, p, p, p, h3, p, h2, p, p, h2, p, p, p, h2, dl, p, p, p, p, h2, div.thumb, dl, p, p, p, h2, dl, h3, p, p, p, p, p, p, h3, p, ul, p, p, h2, dl, p, p, p, h2, p, p, p, p, h2, p, p, p, p, p, p, h2, p, p, p, p, h2, h3, ul, h3, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, ul, h2, p, p, ul, p, div.route_box, p, p, p, p, p, table, p, div, p, p, p, p]
最初にh3
「ナビゲート中」と表示され、最後p
に<br>
(奇妙な HTML ですね) が含まれています。2 番目の選択と削除では、次のように削減されました。
[h3, p, p, p, p, h3, p, p, p, h3, div.thumb, div.thumb, p, ul, p, p, p, p, p, p, p, div.thumb, ul, ul, div.thumb, ul, ul, p, ul, ul, h3, p, p, p, h3, p, p, p, h3, p, p, p, p, p, p, h2]
最初h3
はまだ「ナビゲート中」と言っており、最後h2
はあなたが参照した「参照」です。select("h2") と remove の結果は次のようになりました。
[h3, p, p, p, p, h3, p, p, p, h3, div.thumb, div.thumb, p, ul, p, p, p, p, p, p, p, div.thumb, ul, ul, div.thumb, ul, ul, p, ul, ul, h3, p, p, p, h3, p, p, p, h3, p, p, p, p, p, p]
「Get around」h2
と「See」の間のすべての要素が含まれていますh2
。