XPathで兄弟要素を選択する方法 (preceding-sibling & following-sibling)
回答
XPathで兄弟要素を選択するには、preceding-siblingとfollowing-siblingの軸を使用します。これらはDOM内で水平に移動するためのもので、参照ノードの同じ親を持つ前にまたは後に表示される要素を選択でき、構造化または準構造化されたHTMLで正確なデータ抽出を可能にします。
詳細な説明
XPathはDOMを移動するための複数のナビゲーション軸を提供しており、兄弟選択はウェブスクレイピングやオートメーションワークフローで最も役立つ技術の一つです。兄弟要素は、ドキュメント構造で同じ親を持つノードであり、ターゲット要素に一意の識別子や属性がない場合に特に役立ちます。
following-sibling::軸は、現在のノードと同じ階層で後に表示されるすべてのノードを選択し、preceding-sibling::はその前に表示されるノードを選択します。例えば、//label[text()='Email']/following-sibling::inputは、ラベルに関連する入力フィールドを検索できます。
これらのクエリは、フィルタ、インデックス、または条件を追加することでさらに詳しくできます。たとえば、following-sibling::*[1]は直後の兄弟ノードのみを選択し、[preceding-sibling::h2 and following-sibling::h2]のような条件を組み合わせることで、特定のマーカーの間の要素を隔離できます。
このテクニックは、動的なページのスクレイピング、構造化ブロック(例: 商品仕様、表)の抽出、および要素が一意に識別されるのではなく文脈に依存するレイアウトのナビゲーションに広く使用されています。
解決策 / 方法
- 方向性の兄弟軸を使用する:既知の要素を基準にして
preceding-sibling::tagまたはfollowing-sibling::tagを適用します。これは要素がグループ化されているが一意の属性がない場合に効果的です。 - 条件やインデックスと組み合わせる:
[1]、[last()]、または属性フィルタなどの述部を使用して結果を絞り込みます。たとえば、//div/following-sibling::p[1]は、divの後の最初の段落を選択します。 - セキュリティ管理保護ページに対応する:保護されたウェブサイトから兄弟ベースのデータを抽出する場合、自動化によりCAPTCHAのチャレンジが発生する可能性があります。CapSolverなどのソリューションを使用すると、CAPTCHAの中断を解決し、手動介入なしでXPathベースのスクレイピングワークフローを信頼性高く続けることができます。
最適な実践 / ヒント
- DOMの変更に耐えられるように、絶対パスよりも相対的なXPath式を優先してください。
- 要素の種類が異なるが構造が一貫している場合、ワイルドカードセレクタ(
*)を使用してください。 - 複雑なレイアウトでは、兄弟軸と親または祖先のナビゲーションを組み合わせてください。
- スクレイピングタスクをスケールする前に、ブラウザの開発者ツールや自動化フレームワークでXPathクエリをテストしてください。
👉 関連:
CapSolverで登録する際、コード
FAQを使用して、追加の5%のボーナスをチャージに追加してください。
CapSolver FAQ — capsolver.com
