背景
スクレイピングについて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と比較するとボタンを押したりログインしたりと言った動作ができるため、 スクレイピングできる幅も広く使い勝手がとても良い印象を受けました。 ただ操作内容によっては読み込みを待つといった操作が必要になるため、 そう言った細かいところを今後勉強していこうと思います。
このように弊社では、オンライン上にあるデータをスクレイピングして、ビジネスに活用するお手伝いも数多く依頼頂いております。 お困りの際は是非こちらよりお問い合わせください。