32
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

dockerでpython+seleniumのスクレイピング

Posted at

dockerを使ってスクレイピング環境構築

pythonを実行するコンテナに、自分でchromeやらドライバをインストールしたりするのは面倒なので、
あらかじめchromeがインストールされたdockerイメージを使いたかったので、環境構築メモ。

python実行環境とselenium実行環境を別のコンテナとして準備して使う。

selenium実行環境はdocker-seleniumのChromeがインストールされたstandaloneイメージを使う。
https://github.com/SeleniumHQ/docker-selenium

docker-compose

version: "3"
services:
  selenium:
    image: selenium/standalone-chrome:4.1.4-20220427
    ports:
      - 4444:4444
      - 7900:7900
    volumes:
      - /dev/shm:/dev/shm
  app:
    build: .
    ports:
      - 8888:8888
    volumes:
      - .:/app
    environment:
      SELENIUM_URL: http://selenium:4444/wd/hub
    command: jupyter-notebook --port=8888 --ip=0.0.0.0 --allow-root --NotebookApp.token=''
    tty: true

seleniumコンテナのportで7900をマッピングしている。VNCクライアントをインストールしてなくても、http://localhost:7900でGUIが確認できる。
(接続の時に求められるパスワードはデフォルトでsecretになっている。)

appコンテナ(python実行環境)の環境変数にSELENIUM_URLを指定。プログラムの中でこれを使うようにする。
command部分はjupyter-notebookを使うためなので、不要な人は不要。

Dockerfile

FROM python:3.8.10

ENV PYTHONIOENCODING utf-8
ENV TZ="Asia/Tokyo"
ENV LANG=C.UTF-8
ENV LANGUAGE=en_US:en_US

WORKDIR /app

COPY ./requirements.txt /tmp/requirements.txt

RUN pip install -r /tmp/requirements.txt

インストールするものは、requirements.txtに適当に記述。

requirements.txt

selenium
jupyter
requests
BeautifulSoup4

テスト用のスクリプト

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import os
import time

url = "https://www.google.com"
keyword = "スクレイピング"

driver = webdriver.Remote(
    command_executor = os.environ["SELENIUM_URL"],
    options = webdriver.ChromeOptions()
)

driver.implicitly_wait(10)

driver.get(url)
driver.find_element(By.NAME, "q").send_keys(keyword + Keys.RETURN)

time.sleep(5)
driver.quit()

webdriver.Remoteでseleniumコンテナを指定している。(ここでdocker-compose.ymlで設定している環境変数を使っている。)

あとは、
ブラウザでhttp://localhost:7900にアクセスした状態で、プログラムを実行すると、実際に動作している様子が確認できるかと!

32
23
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?