[考え方] XPathは、2つのノード間の兄弟ノード、子ノード、孫ノード、現在のノードおよびその他の要素またはテキストコンテンツを選択して指定します

XPath は非常に強力で、特別な比較演算子をサポートするだけでなく、バ​​ッチ選択に特有のフィルター式などの一般的な関数もサポートします。

方法のみを見る場合は、次の 3 レベルの見出しに直接スキップしてください。

今日、小規模ビジネスのシナリオに遭遇しました。下の図を参照してください。2つのノードのコンテンツ
Webサイト
を抽出する方法は? おそらく誰もが兄弟ノードを思い浮かべたでしょう。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軸法

軸名 結果
祖先 現在のノードのすべての祖先 (親、祖父母など) を選択します。
先祖または自分自身 現在のノード自体だけでなく、現在のノードのすべての祖先 (親、祖父母など) も選択します。
属性 現在のノードのすべての属性を選択します。
子供 現在のノードのすべての子要素を選択します。
子孫 現在のノードのすべての子孫要素 (子、孫など) を選択します。
子孫または自分自身 現在のノードと現在のノード自体のすべての子孫要素 (子、孫など) を選択します。
続く ドキュメント内の現在のノードの終了タグの後にあるすべてのノードを選択します。
名前空間 現在のノードのすべての名前空間ノードを選択します。
現在のノードの親ノードを選択します。
前の 現在のノードの開始タグの前にあるドキュメント内のすべてのノードを選択します。
前の兄弟 現在のノードの前のすべての兄弟ノードを選択します。
自己 現在のノードを選択します。

おすすめ

転載: blog.csdn.net/qq_44491709/article/details/108002960