XPath は非常に強力で、特別な比較演算子をサポートするだけでなく、バッチ選択に特有のフィルター式などの一般的な関数もサポートします。
方法のみを見る場合は、次の 3 レベルの見出しに直接スキップしてください。
今日、小規模ビジネスのシナリオに遭遇しました。下の図を参照してください。2つのノードのコンテンツ
を抽出する方法は? おそらく誰もが兄弟ノードを思い浮かべたでしょう。name="ContenStart"
name="ContenEnd"
//meta[@name="ContentStart"]/following-sibling::*
ただし、この方法を使用すると、必要のない他のノードが選択されてしまいます。
ここでは、XPath に付属の方法を使用してnot
テーブル タグを除外できますが、同じレベルに多くのタグが存在すると、冗長な式が発生し、ノード数が減少します。読みやすさ。
少し観察すると、2 つのノード間のラベルがすべて p ラベルであることがわかります。そのため、問題を解決するには、"*"
それらを p に置き換えることができます。しかし、2 つのノード間に p だけでなく他のラベルも存在する場合はどうなるでしょうか?"p"
2 つのノード間でコンテンツを選択する問題を解決するための普遍的な方法
主にXpath軸の使い方で、詳細な軸方法が付属しています。
軸: 現在のノードを基準にしてノード セットを定義できます —w3school
上記のシナリオは次のように最適化できます
。
#following选取文档中当前节点的结束标签之后的所有节点。
//meta[@name="ContentStart"]/following::*
上
#preceding直到所有这个节点的父辈节点,顺序选择每个父辈节点前的所有同级节点
//meta[@name="ContentEnd"]/preceding::*
2 方向の XPath には交差が必要で、交差部分が抽出するコンテンツになります。
残りは、重複したコンテンツを抽出するための Python の基本、スライスまたはその他の方法です。
兄弟ノード、子ノード、または孫ノードを抽出する必要がある場合は、axis メソッドを置き換えるだけです。
このアイデアは時間と労力がかかり、結果重視のシナリオに適しています。!!
添付ファイル:XPath軸法
軸名 | 結果 |
---|---|
祖先 | 現在のノードのすべての祖先 (親、祖父母など) を選択します。 |
先祖または自分自身 | 現在のノード自体だけでなく、現在のノードのすべての祖先 (親、祖父母など) も選択します。 |
属性 | 現在のノードのすべての属性を選択します。 |
子供 | 現在のノードのすべての子要素を選択します。 |
子孫 | 現在のノードのすべての子孫要素 (子、孫など) を選択します。 |
子孫または自分自身 | 現在のノードと現在のノード自体のすべての子孫要素 (子、孫など) を選択します。 |
続く | ドキュメント内の現在のノードの終了タグの後にあるすべてのノードを選択します。 |
名前空間 | 現在のノードのすべての名前空間ノードを選択します。 |
親 | 現在のノードの親ノードを選択します。 |
前の | 現在のノードの開始タグの前にあるドキュメント内のすべてのノードを選択します。 |
前の兄弟 | 現在のノードの前のすべての兄弟ノードを選択します。 |
自己 | 現在のノードを選択します。 |