BeaSkyblue

ネコでもわかる 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 もネコパンチひとつで攻略できます。