BLOG

ブログ

dockerでseleniumを動かしてみる(chrome_headless)

背景

 スクレイピングについてbeaautiful soup+requestを使った簡単なものは実施したことがあったのですが、 最近seleniumに関する相談を受けることが増えたため実行テストを行ったので、 その際のコードや知見について残しておこうと思います。 実行環境としてはクラウド環境での利用も考えてdockerで構築し、 GUIがなくても動作するようにchrome headlessを利用して実行できるように環境を整えました。

実際のコード

dockerfile

 dockerfileとしては Docker上で、Python + Selenium + Headless Chromeを使用してWEBスクレイピング のコードを利用させていただきました。

FROM python:3

WORKDIR /usr/src/app
RUN apt-get update && apt-get install -y unzip

RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add && \
    echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list && \
    apt-get update && \
    apt-get install -y google-chrome-stable

RUN pip install selenium

ADD https://chromedriver.storage.googleapis.com/87.0.4280.20/chromedriver_linux64.zip /opt/chrome/
RUN cd /opt/chrome/ && \
    unzip chromedriver_linux64.zip

ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/chrome

CMD [ "python", "./macSeleniumHeadless.py" ]

pythonの中身を変更することも考慮し、 docker runの際にマウントを撮って実行ファイルを渡す仕様にしています。

$ docker build -t tmp-train .
$ docker run -v `pwd`:/usr/src/app tmp-train

pythonファイル

 少し長いためgithubの方にコードを挙げています。 ( macSeleniumHeadless.py  ) 今回googleで「Python」と検索を行い、 検索1ページ目に出てきたページタイトルとURLをsqliteのテーブルに保存するプログラムになっています。 chrome headlessの利用は以下コードだけで設定できるため、 コード開発時はこのオプションを除いて挙動を確認しつつ開発を行うことができました。

options.add_argument('--headless')

感想

 今回seleniumの実行環境を整えてみたのですが、 dockerのおかげでほぼコピペで実行環境を整えることができました。 seleniumはbeaautiful soup+requestと比較するとボタンを押したりログインしたりと言った動作ができるため、 スクレイピングできる幅も広く使い勝手がとても良い印象を受けました。 ただ操作内容によっては読み込みを待つといった操作が必要になるため、 そう言った細かいところを今後勉強していこうと思います。
 このように弊社では、オンライン上にあるデータをスクレイピングして、ビジネスに活用するお手伝いも数多く依頼頂いております。 お困りの際は是非こちらよりお問い合わせください。

参考リンク

SinkCapitalではデータに関する支援を行っています

弊社はスペシャリスト人材が多く在籍するデータ組織です。 データ分析や分析基盤の設計などでお困りの方がいらっしゃれば、 まずは無料で、こちらから各分野のスペシャリストに直接相談出来ます。