経緯
ECMWFのサイトの絵を自動的に取得して比較に使いたい。
画像ファイルがランダムなURLに配置されるので、ECMWFのウェブページ側から辿るのが必須。
手作業で毎回取得するのはとっても負担。スクレイピングの出番!
ECMWFのサイトがIEで動かないから、Seleniumに手を出すか…(最初はちょっと拡張機能やろうとした)
環境構築に多少手間がかかるらしいから、この機にDockerも覚えよう(Dockerってルーチン化に向いているかよくわからないんだけど大丈夫かなぁ…具体的な不安は障害対応やオーバーヘッド、使用条件が変わっちゃわないかなど)
Dockerの導入
なにはともあれまずセットアップしてみる。言われた通りにdevice-mapperからインストールしてみるけど、これって何だろう?docker専用ライブラリみたいなもの?と思ったけどストレージドライバという汎用のものらしい(やっぱりよくわからない)
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
次にyumにリポジトリを追加する。そしてdocker-ceをインストール。設定ファイルをいじらなくてもレポジトリ追加って出来るんだね。
$ sudo yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce
先人の知恵ありがたや。以下の通りに打ってdockerを起動。
$ sudo systemctl start docker
dockerの使い方をろくに知らないまま、Seleniumのdockerの導入に進む。まぁ何とかなるっしょ。
$ sudo pip3 install selenium
試しにごく簡単なサンプルコードを動かしてみる。
from selenium import webdriver
# Chrome のオプションを設定する
options = webdriver.ChromeOptions()
options.add_argument('--headless')
# Selenium Server に接続する
driver = webdriver.Remote(
command_executor='http://localhost:4444/wd/hub',
desired_capabilities=options.to_capabilities(),
options=options,
)
# Selenium 経由でブラウザを操作する
driver.get('https://qiita.com')
print(driver.current_url)
# ブラウザを終了する
driver.quit()
動いた!ヘッドレスモードで動かすから何やっているか見えなくて、思ったより時間かかったけれど、自動処理できるなら問題ないか。
参考文献
Docker入門(さくらのナレッジ) – https://knowledge.sakura.ad.jp/13265/
10分で理解する Selenium – https://qiita.com/Chanmoro/items/9a3c86bb465c1cce738a
CentOS7×Chromeでスクレイピング環境を構築するチュートリアル – https://qiita.com/sakuraya/items/8d415e154ce60a83d63d#