🕸️
Playwrightとlxmlを利用したスクレイピング
はじめに
少し前からJ-REITの情報を地図上に表示するJ-REIT Mapsというアプリを開発しています。
REITを運営している会社のWebサイトをスクレイピングして、情報を地図に表示するWebアプリです。REITの建物や施設は意外と身近なところにあるので、それを地図に表示するとおもしろいかなと思ってつくっています。
REITのWebサイトをスクレイピング
Webサイトから情報を取得するため、lxmlを利用してスクレイピングしています。ただ、昨今はJavaScriptを利用しているケースも多くて、その場合はJavaScriptを解釈する処理が必要になります。
Playwright
JavaScriptを解釈してスクレイピングするためにSeleniumあたりを使うのかなと思って調べていたら、最近はPlaywrightというのがよさそうだったので使ってみることにしました。
なんとなくよさそうな雰囲気はわかるものの、要素の選択が自分にはわかりにくいように思いました。
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