この記事では主に Python クローラーでの xpath の基本的な使用方法を紹介し、参考として提供します。一緒に見てみましょう
1. はじめに
XPath は、XML ドキュメント内の情報を検索するための言語です。 XPath を使用すると、XML ドキュメント内の要素と属性をトラバースできます。 XPath は W3C XSLT 標準の主要な要素であり、XQuery と XPointer は両方とも XPath 式に基づいて構築されています。
2. インストール
3.
rreeeを使用します。基本的な使い方
pip3 install lxml
以下からその結果、プリンターの HTML は実際には Python オブジェクトであり、etree.tostring(html) は不完全な HTML の基本的な記述メソッドであり、ラベルの欠落している腕と脚を完成させます。
from lxml import etree
3. 特定のタグの内容を取得する (基本的な使用法) a タグのすべての内容を取得するには、a の後にスラッシュを追加する必要はありません。そうしないとエラーが発生します。報告される。
書き方その1
from lxml import etree wb_data = """ <p> <ul> <li class="item-0"><a href="link1.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >first item</a></li> <li class="item-1"><a href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >second item</a></li> <li class="item-inactive"><a href="link3.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >third item</a></li> <li class="item-1"><a href="link4.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fourth item</a></li> <li class="item-0"><a href="link5.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fifth item</a> </ul> </p> """ html = etree.HTML(wb_data) print(html) result = etree.tostring(html) print(result.decode("utf-8"))
書き方その2(見つける必要があるタグの直後に/text()を追加するだけです)
<Element html at 0x39e58f0> <html><body><p> <ul> <li class="item-0"><a href="link1.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >first item</a></li> <li class="item-1"><a href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >second item</a></li> <li class="item-inactive"><a href="link3.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >third item</a></li> <li class="item-1"><a href="link4.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fourth item</a></li> <li class="item-0"><a href="link5.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fifth item</a> </li></ul> </p> </body></html>
4. HTMLファイルを開いて読みます
html = etree.HTML(wb_data) html_data = html.xpath('/html/body/p/ul/li/a') print(html) for i in html_data: print(i.text) <Element html at 0x12fe4b8> first item second item third item fourth item fifth item
html = etree.HTML(wb_data) html_data = html.xpath('/html/body/p/ul/li/a/text()') print(html) for i in html_data: print(i) <Element html at 0x138e4b8> first item second item third item fourth item fifth item
5. 指定されたパスの下にあるタグの属性を出力します (トラバースして属性の値を取得し、タグの内容を見つけることができます)
#使用parse打开html的文件 html = etree.parse('test.html') html_data = html.xpath('//*')<br>#打印是一个列表,需要遍历 print(html_data) for i in html_data: print(i.text)
Print:
link1.htmllink2.htmllink4.html
link5.html
6. xpath を使用して ElementTree オブジェクトを 1 つずつ取得することがわかっています。コンテンツを見つける必要がありますが、リストを走査してデータを取得する必要もあります。 絶対パス下のaタグ属性がlink2.htmlと等しいことが分かりました。
html = etree.parse('test.html') html_data = etree.tostring(html,pretty_print=True) res = html_data.decode('utf-8') print(res) 打印: <p> <ul> <li class="item-0"><a href="link1.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >first item</a></li> <li class="item-1"><a href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >second item</a></li> <li class="item-inactive"><a href="link3.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >third item</a></li> <li class="item-1"><a href="link4.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fourth item</a></li> <li class="item-0"><a href="link5.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fifth item</a></li> </ul> </p>
Print:
['2 番目の項目']2 番目の項目7 上ではすべての絶対パス (それぞれルートから始まります) が見つかり、下では相対パス Path が見つかります。たとえば、すべての li タグの下にあるタグのコンテンツを検索します。html = etree.HTML(wb_data) html_data = html.xpath('/html/body/p/ul/li/a/@href') for i in html_data: print(i)
印刷:
['最初のアイテム', '2番目のアイテム', '3番目のアイテム', '4番目のアイテム', '5番目のアイテム']最初のアイテム2番目のアイテム['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']link1.html link2.htmllink3.html3番目のアイテム
4 番目の項目
8. 上記では、href 属性値に等しい a タグのすべての属性を見つけるために絶対パスを使用しました。次に、絶対パスを使用します。 l を検索する相対パス a タグの下の li タグの下の相対パスの下の href 属性の値 a タグの後には二重の // が必要であることに注意してください。html = etree.HTML(wb_data) html_data = html.xpath('/html/body/p/ul/li/a[@href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ]/text()') print(html_data) for i in html_data: print(i)印刷:
[635242ed84ddd0de0bf9622e5d5d93df]2番目の項目link4.html
link5.html
9. 相対パスでの特定の属性の確認方法は、絶対パスでの確認方法と同様であると言えます。 。html = etree.HTML(wb_data) html_data = html.xpath('//li/a/text()') print(html_data) for i in html_data: print(i)Print:
10. 最後のliタグのaタグのhref属性を見つけます
['fifth item']fifth itemhtml = etree.HTML(wb_data) html_data = html.xpath('//li/a//@href') print(html_data) for i in html_data: print(i)。 Print :
11. 最後から 2 番目の li タグ
['fourth item' ] 4 番目の項目html = etree.HTML(wb_data) html_data = html.xpath('//li/a[@href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ]') print(html_data) for i in html_data: print(i.text)の a タグの href 属性を見つけます。Print:
12. ページ上のタグの xpath パスを抽出すると、次の図が表示されます:
よく使われるhtml = etree.HTML(wb_data) html_data = html.xpath('//li[last()]/a/text()') print(html_data) for i in html_data: print(i)説明: 相対パスを使用してすべてのタグを検索し、属性 ID は kw タグと同じです。
html = etree.HTML(wb_data) html_data = html.xpath('//li[last()-1]/a/text()') print(html_data) for i in html_data: print(i)関連する推奨事項:
Python クローラー 実際のブラウザーを使用して Web ページを開く 2 つの方法の概要
以上がPythonクローラーにおけるxpathの基本的な使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。