Pythonでスクレイピングと言えば Beautiful Soup か Selenium です。
SeleniumはJavaScriptを使っているページでもデータが取得できるという、とても便利なライブラリですが、少し面倒です。
これを簡単に使えるようにしたのがHeliumです。
使い方をメモしておきます。
参考
helium/docs/cheatsheet.md at master · mherrmann/helium
Lighter web automation for Python. Contribute to mherrmann/helium development by creating an account on GitHub.
![](https://res.cloudinary.com/zenn/image/upload/s--qV4a6dgc--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Python%2520%253A%2520Helium%25E3%2582%2592%25E4%25BD%25BF%25E7%2594%25A8%25E3%2581%2597%25E3%2581%259F%25E3%2583%2596%25E3%2583%25A9%25E3%2582%25A6%25E3%2582%25B6%25E6%2593%258D%25E4%25BD%259C%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:Nakaie%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2Y0NTRjNWIxYTUuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png)
Python : Heliumを使用したブラウザ操作
インストール
次のようにインストールします。これだけです。
$ pip install helium
なお、使っているChromeとChromeDriverのバージョンが違うと動きません。
![](https://stabucky.com/wp/wp-content/uploads/2024/03/python_logo-160x90.png)
ChromeDriverのバージョンが違う場合に試した方法
PythonでHeliumを使ったところ、次のようなメッセージが出ました。
基本
次のようにHeliumをインポートします。
from helium import *
次のようにChromeを起動しGoogleを開きます。
start_chrome("google.com")
次のようにブラウザを終了します。
kill_browser()
「はい」と書かれた箇所をクリックするには次のようにします。
click("はい")
「生年月日」と書かれた箇所の右の文字列を取得するには次のようにします。
v = Text(to_right_of="生年月日").value
次のようにするとページを遷移します。ログインした後などに使います。
url = ""
go_to(url)
go_to(url)
CSSと同じセレクタが使えます。
次のようにするとセレクタに合致するエレメントを全て取得します。
els = find_all(S(セレクタ))
S()という書き方をします。
エレメントを一つだけ取得する方法はないようです。
応用
キーボードを押す操作を再現する場合はpressを使います。
次のようにします。
press(ENTER)
press(TAB)
press(ESCAPE)
press(TAB)
press(ESCAPE)
heliumは基本的には要素が表示されるまで待ちます。
何らかの原因で強制的に時間を指定して処理を待つにはtime.sleepを使います。
import time
time.sleep(15) # 秒数
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()
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()
コメント