ふくだ学習録とは?
ふくだが学習したことの備忘録。
目に見える形で残すことによってやる気を出す個人的な作戦です。
他人に見せるように書いているわけではないので、すごく読みにくいです。
読了した本
データベースエンジニア養成読本 [DBを自由自在に活用するための知識とノウハウ満載!]
ゼロから作るDeepLearning
PHPフレームワーク CakePHP 3入門
SQLアンチパターン
Docker入門
今読んでいる本
なし
アプリ制作
docker環境へseleniumとgoogle chrome(headless chrome)追加
スクレイピングを実施するときに、headless chromeで行いたい。ここに至った流れは下記。
scrapyによるスクレイピング実施
↓
取得したい値が取得できない
↓
取得したい要素がJSで動的に作成されているので、ブラウザを用いてスクレイピングしないと取得できないっぽい(推測)
↓
chrome使おう
↓
それならheadless chrome使おう
↓
dockerコンテナ内にインストールしよう
って感じです。(前回と今回の作業にの再整理)
以下参考にしたサイトです。
Headless ChromeをDocker上で動かして、E2Eのテスト
ChromeとPythonのchromedriver-binaryのバージョンを合わせたい。
chromiumを使用する
上記した参考サイトでは、Debain
系のLinuxを使用していたが、今回自分はalpine
Linuxで作成していっているので、そのままでは進めない。
具体的には下記コードが通らない。
RUN sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apk/repositories/sources.list.d/google.list'
というのもalipineには/etc/apk...
といったディレクトリがそもそもないとのこと。(まぁそりゃそう)
まじかーと思って「alpineのパッケージ管理用ディレクトリを探して、それに記載変更しよう」と思っていたのですが、下記サイトを見つけました。
どうやらalpine用のchromium
というパッケージがあるとのこと。
ここからはchromium使っていこうかと思う。
How can we install google-chrome-stable on alpine image in dockerfile using dpkg?
現段階のDockerfile(スクレイピングサーバ)
今の段階ではこんな感じ
FROM python:3.6-alpine
RUN apk add --update --no-cache \
# scrapyに必要なライブラリの追加
build-base \
python-dev \
zlib-dev \
libxml2-dev \
libxslt-dev \
openssl-dev \
libffi-dev \
# headless chromeのために必要なライブラリの追加
udev \
ttf-freefont \
chromium
ADD pip_requirements.txt /tmp/pip_requirements.txt
RUN pip install -r /tmp/pip_requirements.txt
# スクレイピング時に日本語化けを防ぐため、フォントを追加
RUN mkdir /noto
ADD https://noto-website.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip /noto
WORKDIR /noto
RUN unzip NotoSansCJKjp-hinted.zip && \
mkdir -p /usr/share/fonts/noto && \
cp *.otf /usr/share/fonts/noto && \
chmod 644 -R /usr/share/fonts/noto/ && \
fc-cache -fv
WORKDIR /
RUN rm -rf /noto
ENTRYPOINT tail -f /dev/null
ADD ./app /usr/src/app
WORKDIR /usr/src/app
今日の一言
結局chromeもchromedriverもどっちもインストールせず!!ようやく作れる!はず!
環境(docker)構築で結構時間を取られてしまってるーーー。
「軽量Linuxええやん!」って思ってalpine使っていったけど、やっぱり参考にするサイトとか事例では違うディストリビューションの方が圧倒的に多いから、変に工数かかっちゃってる感は否めない。
もう多分詰まりそうなところは抜けだけど、これ以上時間かかるようやったらalpine版のpythonイメージやめる!Ubuntuにする!