Help us understand the problem. What is going on with this article?

Python + Chrome on CentOS7(Docker)でスクレイピング

More than 1 year has passed since last update.

概要

Pythonとchromeを使って、CentOS7上でスクレイピングをする環境を構築します。
Dockerで環境を構築します。

Golang版は、こちらです。
Golang + Chrome on CentOS7(Docker)でスクレイピング

関連記事

環境構築

以下の内容はGitHubにpushしてあるので、こちらをcloneしていただいてDockerを起動させれば実現できます。
https://github.com/Esfahan/docker-python-chrome

ディレクトリ構成

以下のディレクトリ構成を前提とします。
/codeは、dockerコンテナにマウントさせる領域です。

code/
Dockerfile
files/

google-chrome.repo

google-chromeを取得するためのレポジトリファイルを作成します。
files/etc/yum.repos.d/google-chrome.repoとして作成します。

[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

Dockerfileを作成

From centos:7

ARG PY_VER=3.7.1
ARG CHROME_DRIVER_VER=2.43

RUN yum update -y

##################
# Python, pip
##################
# Dependencies
RUN yum -y install zlib \
                   tk-devel \
                   tcl-devel \
                   ncurses-devel \
                   gdbm-devel \
                   db4-devel \
                   readline-devel \
                   zlib-devel \
                   bzip2-devel \
                   sqlite-devel \
                   openssl-devel \
                   libXext.x86_64 \
                   libSM.x86_64 \
                   libXrender.x86_64 \
                   gcc \
                   gcc-c++ \
                   libffi-devel \
                   python-devel \
                   patch \
                   bzip2 \
                   make

# python
RUN curl -O https://www.python.org/ftp/python/${PY_VER}/Python-${PY_VER}.tgz
RUN tar zxfv Python-${PY_VER}.tgz

WORKDIR Python-${PY_VER}
RUN ./configure --enable-unicode=ucs4 --prefix=/usr/local
RUN make
RUN make install

# pip
RUN curl -O https://bootstrap.pypa.io/get-pip.py
RUN python get-pip.py

# symlink for python3.x
RUN  PY_MVER=$(echo ${PY_VER} | sed s/\.[0-9,]\.[0-9,]*$//g); \
echo ${PY_MVER}; \
if [ "${PY_MVER}" = "3" ]; then \
      ln -s /usr/local/bin/python3 /usr/local/bin/python; \
      ln -s /usr/local/bin/pip3 /usr/local/bin/pip; \
fi

# pip modules
RUN pip install --upgrade pip
RUN pip install selenium

########################
# chromedriver, chrome
########################
# chromedriver
RUN yum install -y unzip
RUN curl -O https://chromedriver.storage.googleapis.com/${CHROME_DRIVER_VER}/chromedriver_linux64.zip
RUN unzip chromedriver_linux64.zip
RUN mv chromedriver /usr/local/bin/

# Dependencies
RUN yum install -y libX11 \
                   GConf2 \
                   fontconfig

# chrome
ADD files/etc/yum.repos.d/google-chrome.repo /etc/yum.repos.d/google-chrome.repo
RUN yum install -y google-chrome-stable \
                   libOSMesa

# fonts
RUN yum install -y google-noto-cjk-fonts \
                   ipa-gothic-fonts

build

$ docker build -t python-chrome:latest ./

コンテナ起動

$ docker run --name python-chrome-container \
             -v $(pwd)/code:/code \
             -itd python-chrome:latest /bin/bash

Pythonのスクリプトを作成

code/main.pyとして作成します。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.binary_location = '/usr/bin/google-chrome'
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(options=options)

driver.get('https://www.google.co.jp/')
print(driver.title) #=> Google
driver.save_screenshot('Google.png')

実行

これを実行すると、GoogleのトップページのtitleであるGoogleが表示され、Google.pngとして、スクリーンショットが作成されます。

$ docker exec -it python-chrome-container /bin/bash -c 'python /code/main.py'
Google

Prevent Error: Fontconfig warning: "/etc/fonts/fonts.conf", line 86: unknown element "blank"というエラーが出る場合は、/etc/fonts/fonts.confの、<blank></blank>の削除、もしくはコメントアウトをして下さい。

参考:発生したエラーについて

参考

Esfahan
WEB系出身。現在はビッグデータの基盤構築、ETLなどがメイン。 / YouTubeで料理チャンネルやってます → https://www.youtube.com/channel/UCDnYBh2TtUAfQ0Z-tl0jTyw
https://www.youtube.com/channel/UCDnYBh2TtUAfQ0Z-tl0jTyw
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした