🕸️

Playwrightとlxmlを利用したスクレイピング

2025/02/14に公開

はじめに

少し前からJ-REITの情報を地図上に表示するJ-REIT Mapsというアプリを開発しています。

https://jreitmaps.defrag.works/

REITを運営している会社のWebサイトをスクレイピングして、情報を地図に表示するWebアプリです。REITの建物や施設は意外と身近なところにあるので、それを地図に表示するとおもしろいかなと思ってつくっています。

REITのWebサイトをスクレイピング

Webサイトから情報を取得するため、lxmlを利用してスクレイピングしています。ただ、昨今はJavaScriptを利用しているケースも多くて、その場合はJavaScriptを解釈する処理が必要になります。

Playwright

JavaScriptを解釈してスクレイピングするためにSeleniumあたりを使うのかなと思って調べていたら、最近はPlaywrightというのがよさそうだったので使ってみることにしました。

なんとなくよさそうな雰囲気はわかるものの、要素の選択が自分にはわかりにくいように思いました。

https://qiita.com/ko-he-8/items/85116e1d99ed4b176657

Playwrightとlxmlの利用

結局、自分にとってはlxmlが使いやすかったので、以下のようなコードになりました。PlaywrightでJavaScriptを解釈した結果のHTMLを取得して、そのHTMLをlxmlで処理しています。

from lxml import etree, html
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("<URL>")
    tree = html.fromstring(page.content())
    browser.close()

rows = tree.xpath('//tbody[@id="database"]/tr')

とりあえず自分にとっては快適にプログラムを書けるようになりました。Playwrightはスクレイピング以外でも使う機会はありそうなので、引き続き勉強していきたいと思います。

Discussion