ホームページ  >  記事  >  バックエンド開発  >  Pythonクローラーにおけるxpathの基本的な使い方を詳しく解説

Pythonクローラーにおけるxpathの基本的な使い方を詳しく解説

不言
不言オリジナル
2018-04-27 11:01:564461ブラウズ

この記事では主に Python クローラーでの xpath の基本的な使用方法を紹介し、参考として提供します。一緒に見てみましょう

1. はじめに

XPath は、XML ドキュメント内の情報を検索するための言語です。 XPath を使用すると、XML ドキュメント内の要素と属性をトラバースできます。 XPath は W3C XSLT 標準の主要な要素であり、XQuery と XPointer は両方とも XPath 式に基づいて構築されています。

2. インストール

rreee

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(&#39;/html/body/p/ul/li/a&#39;)

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(&#39;/html/body/p/ul/li/a/text()&#39;)

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(&#39;test.html&#39;)

html_data = html.xpath(&#39;//*&#39;)<br>#打印是一个列表,需要遍历

print(html_data)

for i in html_data:

  print(i.text)

Print:

link1.html

link2.html

link4.html

link5.html

6. xpath を使用して ElementTree オブジェクトを 1 つずつ取得することがわかっています。コンテンツを見つける必要がありますが、リストを走査してデータを取得する必要もあります。

絶対パス下のaタグ属性がlink2.htmlと等しいことが分かりました。

html = etree.parse(&#39;test.html&#39;)

html_data = etree.tostring(html,pretty_print=True)

res = html_data.decode(&#39;utf-8&#39;)

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(&#39;/html/body/p/ul/li/a/@href&#39;)

for i in html_data:

  print(i)

印刷:

['最初のアイテム', '2番目のアイテム', '3番目のアイテム', '4番目のアイテム', '5番目のアイテム']

最初のアイテム

2番目のアイテム

3番目のアイテム

4 番目の項目

8. 上記では、href 属性値に等しい a タグのすべての属性を見つけるために絶対パスを使用しました。次に、絶対パスを使用します。 l を検索する相対パス a タグの下の li タグの下の相対パスの下の href 属性の値 a タグの後には二重の // が必要であることに注意してください。

html = etree.HTML(wb_data)

html_data = html.xpath(&#39;/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()&#39;)

print(html_data)

for i in html_data:

  print(i)

印刷:

['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']

link1.html

link2.html

link3.html

link4.html

link5.html

9. 相対パスでの特定の属性の確認方法は、絶対パスでの確認方法と同様であると言えます。 。

html = etree.HTML(wb_data)

html_data = html.xpath(&#39;//li/a/text()&#39;)

print(html_data)

for i in html_data:

  print(i)

Print:

[635242ed84ddd0de0bf9622e5d5d93df]

2番目の項目

10. 最後のliタグのaタグのhref属性を見つけます

html = etree.HTML(wb_data)

html_data = html.xpath(&#39;//li/a//@href&#39;)

print(html_data)

for i in html_data:

  print(i)

Print :

['fifth item']

fifth item

11. 最後から 2 番目の li タグ

html = etree.HTML(wb_data)

html_data = html.xpath(&#39;//li/a[@href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ]&#39;)

print(html_data)

for i in html_data:

  print(i.text)

の a タグの href 属性を見つけます。Print:

['fourth item' ]

4 番目の項目

12. ページ上のタグの xpath パスを抽出すると、次の図が表示されます:

html = etree.HTML(wb_data)

html_data = html.xpath(&#39;//li[last()]/a/text()&#39;)

print(html_data)

for i in html_data:

  print(i)

説明: 相対パスを使用してすべてのタグを検索し、属性 ID は kw タグと同じです。

よく使われる

html = etree.HTML(wb_data)

html_data = html.xpath(&#39;//li[last()-1]/a/text()&#39;)

print(html_data)

for i in html_data:

  print(i)

関連する推奨事項:


Python クローラー 実際のブラウザーを使用して Web ページを開く 2 つの方法の概要


以上がPythonクローラーにおけるxpathの基本的な使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。