web-dev-qa-db-ja.com

JSOUPでこの要素を選択するにはどうすればよいですか?

これはHTML構造です:

enter image description here

Element link = doc.select("div.subtabs p").first();

それはうまくいかないようです。 pを選択するにはどうすればよいですか?

27
HackToHell

Class = "subtabs"を含むDIVは、実際にはp要素の親ではなく、pの兄弟です。 pを取得するには、まずid = "content"を持つ親DIVへの参照を取得する必要があります。

Element link = doc.select("div#content > p").first();

さらに、div#contentの子を選択していることを示す>記号が必要です。

親>子:親から直接派生する子要素。 div.content> pはp要素を検索します。 and body> * bodyタグの直接の子を検索します

将来的にJSOUP CSSセレクターに行き詰まった場合は、 JSOUPセレクター構文クックブック をチェックしてください。これには、いくつかの素晴らしい例と説明があります。

26
jmort253

div#content p.subtabsの子ではありません。

Element link = doc.select("div.subtabs + p")兄弟の直前の要素を見つけます

抽出しようとしているpタグはdivの子ではありません。兄弟です。親divのIDはcontentで、必要なpタグは、親内の最初のpタグです。したがって、doc.select("div#content > p").first();を使用します

はIDを意味し、>はRHSがLHSの子であることを意味します。したがって、ステートメントは、idがcontentのdivの子である最初の段落を取得することを意味します

1
Sai Sunder

Chrome SelectorGadget は、ポイントアンドクリックするだけで、jSoupのCSSセレクターを構築するのに非常に役立ちます。特定のフィールドを対象とする場合、開発時間を数時間節約できました。

1
swiss_steve

これを試して:

Element link = doc.select("div.subtabs > p").first();
0