1. XPathの概要
Webページの階層関係を分析するために、XPathの選択機能は非常に強力であり、非常にシンプルで明確なパス選択式を提供します。
さらに、文字列、数値、時間のマッチング、ノードとシーケンスの処理のための100以上の組み込み関数も提供します。
ほとんどすべての位置決めノードは、XPathを使用して選択できます。
公式サイト:https://www.w3.org/TR/xpath
1. XPathの共通ルール:
2.基本的な使用
from lxml import etree text = '' ' <div> <ul> <li class = "one"> <a href="link1"> 1 </a> </ li> <li class = "two"> <a href = "link2"> 2 </a> </ li> <li class = "three"> <a href="link3"> 3 </a> </ li> <li class = "four"> <a href = "link4"> 4 </a> </ li> <li class = "five"> <a href="link5"> 5 </a> </ ul> </ div> '' ' #将文本Webサイトの型であり、修正全全 HTML = etree。HTML(テキスト) #Webページの構造の全体の補数、ファイルのオープンパス #HTML etree.parse =( 'demo.html'、etree.HTMLParser()) を印刷(HTML) #は、バイトとして、テキスト型にページを変換します =結果etree.tostring(HTML) #をstrのタイプに = result.decode結果(" UTF-8 " ) 印刷(結果を)
1.選択に一致(すべてのノード)
from lxml import etree text = '' ' <div> <ul> <li class = "one"> <a href="link1"> 1 </a> </ li> <li class = "two"> <a href = "link2"> 2 </a> </ li> <li class = "three"> <a href="link3"> 3 </a> </ li> <li class = "four"> <a href = "link4"> 4 </a> </ li> <li class = "five"> <a href="link5"> 5 </a> </ ul> </ div> '' ' #将文本Webサイトの型であり、修正全全 HTML = etree。HTML(テキスト) #選択したコンテンツのマッチング 結果= html.xpath(' // * ' ) を印刷(結果)
2.子ノード
from lxml import etree text = '' ' <div> <ul> <li class = "one"> <a href="link1"> 1 </a> </ li> <li class = "two"> <a href = "link2"> 2 </a> </ li> <li class = "three"> <a href="link3"> 3 </a> </ li> <li class = "four"> <a href = "link4"> 4 </a> </ li> <li class = "five"> <a href="link5"> 5 </a> </ ul> </ div> '' ' #将文本Webサイトの型であり、修正全全 HTML = etree。HTML(テキスト) #選択したコンテンツのマッチング 結果= html.xpath(' //リー/ A ' ) を印刷(結果)
ここで、「/」は直接の子ノードを表し、「//」はすべての子孫ノードを表します
3.親ノード
親ノード:「..」を使用します。親::を使用して親を表すこともできます
from lxml import etree text = '' ' <div> <ul> <li class = "one"> <a href="link1"> 1 </a> </ li> <li class = "two"> <a href = "link2"> 2 </a> </ li> <li class = "three"> <a href="link3"> 3 </a> </ li> <li class = "four"> <a href = "link4"> 4 </a> </ li> <li class = "five"> <a href="link5"> 5 </a> </ ul> </ div> '' ' #将文本Webサイトの型であり、修正全全 HTML = etree。HTML(テキスト) #選択したコンテンツのマッチング #の属性は、親クラスの属性タグがLINK4ある = html.xpath(結果「//a[@href="link4"]/../@class 」) #を@表示 属性result1 = html.xpath(' // a [@ href = "link4"] / parent :: * / @ class ' ) print (result) print(result1)
4.テキストの取得
from lxml import etree text = '' ' <div> <ul> <li class = "one"> <a href="link1"> 1 </a> </ li> <li class = "two"> <a href = "link2"> 2 </a> </ li> <li class = "three"> <a href="link3"> 3 </a> </ li> <li class = "four"> <a href = "link4"> 4 </a> </ li> <li class = "five"> <a href="link5"> 5 </a> </ ul> </ div> '' ' #将文本Webサイトの型であり、修正全全 HTML = etree。HTML(テキスト) #選択したコンテンツのマッチング #の属性は、親クラスの属性タグLINK4のある 結果= html.xpath(' // /テキスト()[のhref = "LINK4" @] ' ) を印刷(結果)
5.属性の複数値マッチング
from lxml import etree text = '' ' <div> <ul> <li class = "one"> <a href="link1"> 1 </a> </ li> <li class = "two"> <a href = "link2"> 2 </a> </ li> <li class = "three two"> <a href="link3"> 3 </a> </ li> <li class = "four"> < a href = "link4"> 4 </a> </ li> <li class = "five"> <a href="link5"> 5 </a> </ ul> </ div> '' ' #将文本转换是网页类型、是修复补全 html = etree。HTML(テキスト) #選択したコンテンツのマッチング #(プロパティ、値@)が含ま 結果= html.xpath(' //李[含まれています(@class、 "三")] / A /テキスト()' ) 印刷(結果)
6.マルチ属性マッチング
複数の属性がノードを決定するため、複数の属性を一致させる必要があります
from lxml import etree text = '' ' <div> <ul> <li class = "one"> <a href="link1"> 1 </a> </ li> <li class = "two three" name = "item"> <a href="link2"> 2 </a> </ li> <li class = "three two"> <a href="link3"> 3 </a> </ li> <li class = "four"> <a href="link4"> 4 </a> </ li> <li class = "five"> <a href="link5"> 5 </a> </ ul> </ div > '' ' #変換し、テキスト・ページ・タイプ、および修正補完 HTML = etree.HTML(テキスト) #選択したコンテンツのマッチング #(プロパティ、値@)が含ま = html.xpath(結果" //李[含まれています(@class、「スリー")および@ name =" item "] / a / text()' ) 印刷(結果)
7.順番に選ぶ
from lxml import etree text = '' ' <div> <ul> <li class = "one"> <a href="link1"> 1 </a> </ li> <li class = "two three" name = "item"> <a href="link2"> 2 </a> </ li> <li class = "three two"> <a href="link3"> 3 </a> </ li> <li class = "four"> <a href="link4"> 4 </a> </ li> <li class = "five"> <a href="link5"> 5 </a> </ ul> </ div > '' ' #変換しテキストのページ・タイプ、および修正補体 HTML = etree.HTML(テキスト) #選択されたコンテンツマッチング #は最初一致リチウム 結果1 = html.xpath(' //のLi [1] / A /テキスト()' ) #最後に、カウントダウン2 結果2 = html.xpath(' //李[最終() - 2] / A /テキスト()' ) #最後 result3 = html.xpath(" //李[最終()] / A /テキスト()' ) #3未満。 result4 = html.xpath(' //のLi [位置()<3。] / A /テキスト()' ) #組み込み関数100は、http://www.w3school.com.cn/ xpath / xpath_functions.asp 印刷(結果1) 印刷(結果2) 印刷(結果3) 印刷(結果4)
8.ノード軸の選択
#タグLINK4親クラスの属性の属性