1. XPath の概要
XPath は、XML ドキュメント内の情報を検索するための言語です。元々は XML ドキュメントを検索するために設計されましたが、HTML ドキュメントの検索にも使用できます。
2. lxmlをインストールする
lxml は Python 用のサードパーティ解析ライブラリで、HTML および XML 解析をサポートしており、非常に効率的であり、XML 解析における Python 独自の xml 標準ライブラリの欠点を補っています。
サードパーティのライブラリをインストールする方法:
pip install lxml
3. XPath分析原理
- etree オブジェクトをインスタンス化するには、解析されたページのソース コード データをオブジェクトにロードする必要があります。
- etree オブジェクトの xpath メソッドを xpath 式と組み合わせて呼び出して、ラベルの配置とコンテンツのキャプチャを実現します。
4. etree オブジェクトをインスタンス化します。
- ローカル HTML ドキュメントのソース コード データを etree オブジェクトにロードします。
etree.parse(filePath)
- インターネットから取得したソース コード データをオブジェクトに読み込みます。
etree.HTML(response.text)
- xpath('xpath式')
5. XPath パス式
表現 | 説明する |
---|---|
/ | ルートノードから選択 |
// | 任意の位置から始まる複数のレベルを表します |
。 | 現在のノードを選択 |
… | 現在のノードの親ノードを選択します |
@ | 属性を選択 |
//div[@class='title'] tag[@attrName=“attrValue”] | 属性の配置 |
//div[@class=“zhang”]/p[3] | インデックスの配置、インデックスは 1 から始まります |
/文章() | 取得されるのはラベル内の直接のテキストコンテンツです |
//文章() | タグ内の非即時テキスト コンテンツ (すべてのテキスト コンテンツ) |
/@attrName ==>img/src | 属性を取得する |
6. 実戦解説と合わせて
CSDN Web サイトを例として説明します。
例: ここでは、公式 Web サイトのトップページにあるヘッドライン ブログのタイトルを取得したいと考えています。コンソールを開き (コンソール上の小さな矢印をクリックするか、Ctrl+Shift+C を同時に押します)、タイトルをポイントし、 div タグのクラス値に従ってそれを見つけます (これは通常、より多くの xpath 構文を使用します。
from lxml import etree
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
}
url = "https://www.csdn.net/"
response = requests.get(url=url, headers=headers)
# 使用etree解析
data = etree.HTML(response.text)
# //div表示任意路径下的div标签
names = data.xpath("//div[@class='headlines']/div[@class='headlines-right']//div[@class='headswiper-item']/a/text()")
url = data.xpath("//div[@class='headlines']/div[@class='headlines-right']//div[@class='headswiper-item']/a/@href")
blog_list = list(zip(names, url))
for blog in blog_list:
print(blog)
効果を実感してください: