Pythonのスクレイピングライブラリ「Helium」の使い方

Pocket

Pythonでスクレイピングと言えば Beautiful Soup か Selenium です。
SeleniumはJavaScriptを使っているページでもデータが取得できるという、とても便利なライブラリですが、少し面倒です。
これを簡単に使えるようにしたのがHeliumです。
使い方をメモしておきます。


目次


参考

selenium-python-helium/cheatsheet.md at master · mherrmann/selenium-python-helium · GitHub
Python : Heliumを使用したブラウザ操作

インストール

次のようにインストールします。これだけです。

$ pip install helium

なお、使っているChromeとChromeDriverのバージョンが違うと動きません。
ChromeDriverのバージョンが違う場合に試した方法 | You Look Too Cool

基本

次のようにHeliumをインポートします。

from helium import *

次のようにChromeを起動しGoogleを開きます。

start_chrome("google.com")

次のようにブラウザを終了します。

kill_browser()

「はい」と書かれた箇所をクリックするには次のようにします。

click("はい")

「生年月日」と書かれた箇所の右の文字列を取得するには次のようにします。

v = Text(to_right_of="生年月日").value

次のようにするとページを遷移します。ログインした後などに使います。

url = ""
go_to(url)

CSSと同じセレクタが使えます。
次のようにするとセレクタに合致するエレメントを全て取得します。

els = find_all(S(セレクタ))

S()という書き方をします。
エレメントを一つだけ取得する方法はないようです。

応用

キーボードを押す操作を再現する場合はpressを使います。
次のようにします。

press(ENTER)
press(TAB)
press(ESCAPE)

heliumは基本的には要素が表示されるまで待ちます。
何らかの原因で強制的に時間を指定して処理を待つにはtime.sleepを使います。

import time
time.sleep(15) # 秒数

サンプル

表から西暦年と節分の日を示すデータを取得します。

from helium import *

url = "https://stabucky.com/wp/archives/13786"
start_chrome(url)

els = find_all(S("td:nth-of-type(1)"))
years = [el.web_element.text for el in els]
els = find_all(S("td:nth-of-type(2)"))
days = [el.web_element.text for el in els]
records = list(zip(years, days))

print(records)

kill_browser()

[ 2021年5月17日 | カテゴリー: Python, デジタル | タグ: ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報