SeleniumはWebスクレイピングで困難な処理の一つ「Webブラウザで表示されるレンダリング後のHTMLを取得」を実現します。
文字通りWebブラウザのコアとなるモジュールをインストールする必要があり、pythonとは別途インストール必要があり導入のハードルがあります。
方法は色々あるようですが、今回はUbuntuのaptパッケージ版で導入してみました。
Ubuntuのaptパッケージ版Seleniumは、Chromiumおよびドライバとの依存関係を自動管理してくれるため、初学者やセットアップコストを抑えたい場合に最もお手軽な構成です。
pip install よりも互換性の問題が起きにくく、特にサーバー用途(WSLやクラウド)におすすめです。
それでは、ヘッドレスでSeleniumを動かす環境を構築してみたいとおもいます。
前提
Ubuntu22.04(ネイティブPC)でPythonがインストール済み
$ python3 --version
Python 3.10.12
インストール
aptでseleniumパッケージがあるようなのでそちらをインストールしてみます。
sudo apt install python3-selenium
pipを使ったインストールもありますが、Webブラウザのモジュールのバージョン管理を考えるとaptのほうが良いでしょう。
ログを見た感じchromium-browserやchromium-chromedriverなどの用語が見えますので、まとめてインストールされているようです。
テストスクリプト
テストスクリプト
ファイル名:selenium_test.py
from selenium import webdriver
options = webdriver.ChromeOptions()
options.binary_location = "/usr/bin/chromium-browser"
options.add_argument("--headless") # GUIなし実行
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(options=options)
driver.get("https://maywork.net")
print(driver.title)
driver.close()
実行
PS>> python3 selenium_test.py
迷惑堂本舗 | 頭の中をやりたいことでいっぱいにする。
タイトルが取得出来たので、動作はしている模様。
HTMLを取得
from selenium import webdriver
import time
options = webdriver.ChromeOptions()
options.binary_location = "/usr/bin/chromium-browser"
options.add_argument("--headless") # GUIなし実行
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(options=options)
driver.get("https://maywork.net")
time.sleep(3)
html = driver.page_source # ← これが最終的なレンダリング後HTML
print(html)
driver.quit()
Seleniumの主な役割は、ページをダウンロードしJavaScriptなどがレンダリングした後のHTMLを取得することなので、上記のサンプルコードで実現しています。
あとは、取得したhtml(テキスト)をBeautifulSoupでパースして必要な情報を抜き出す処理につなげて上げます。



コメント