ネコでもわかる lxml
· 2 min read
スクレイピングで HTML を解析したいときは lxml が高速で便利。ここではネコでも迷わない最小セットを揃えます。
1. インストールとおまじない
pip install lxml
スクリプトでは次の 1 行を最初に読み込んでおきます。
from lxml import html
2. HTML をツリーにする
doc = html.fromstring("""
<html>
<body>
<h1>ねこニュース</h1>
<ul id="topics">
<li class="hot">新しいおもちゃ</li>
<li>お昼寝特集</li>
</ul>
</body>
</html>
""")
fromstring で HTML 文字列をツリーに変換します。ファイルやレスポンスの場合は html.fromstring(response.text) のように使います。
3. XPath で要素を探す
title = doc.xpath("//h1/text()")
topics = doc.xpath("//ul[@id='topics']/li/text()")
print(title[0]) # ねこニュース
print(topics) # ['新しいおもちゃ', 'お昼寝特集']
//タグ名でどこからでも取得。[@属性='値']でフィルタ。text()でテキストだけ取り出せます。
4. 属性を読む・書く
first = doc.xpath("//li[@class='hot']")[0]
print(first.get("class"))
first.set("data-rank", "1")
5. ツリーを整形して出力
from lxml import etree
print(etree.tostring(doc, pretty_print=True, encoding="unicode"))
XPath に慣れてしまえば、複雑な HTML もネコパンチひとつで攻略できます。