Docker上で、Python + Selenium + Headless Chromeを使用してWEBスクレイピング

Docker上で、Python + Selenium + Headless Chromeを使用してWEBスクレイピングをしていきます。Dockerは、すでにインストール済みであるとします。

Dockerfile

FROM python:3

RUN apt-get update && apt-get install -y unzip

#install google-chrome
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

#install selenium
RUN pip install selenium

#install ChromeDriver
ADD https://chromedriver.storage.googleapis.com/2.45/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

新しいイメージを構築します。

sudo docker build -t python-selenium-chrome .

WEBスクレイピング用のスクリプトを用意します。

test.py

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

def _main():
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    driver = webdriver.Chrome(options=options)

    driver.get('https://www.google.co.jp/')
    search = driver.find_element_by_name('q')
    search.send_keys('Python')
    search.send_keys(Keys.RETURN)

    time.sleep(3)
    driver.save_screenshot('search_results.png')

    driver.quit()

if __name__ == '__main__':
    _main()

コンテナを起動します。

sudo docker run -it --rm -v $(pwd):/root python-selenium-chrome bash

スクリプトを実行します。

cd /root
python test.py 

無事結果が得られました。

docker-seleniumを使っても良いかも…?

docker run -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome:3.141.59-iron

test.py

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time


def _main():
    driver = webdriver.Remote(
        command_executor='http:/0.0.0.0:4444/wd/hub',
        desired_capabilities=DesiredCapabilities.CHROME)
 
    driver.get('https://www.google.co.jp/')
    search = driver.find_element_by_name('q')
    search.send_keys('Python')
    search.send_keys(Keys.RETURN)
 
    time.sleep(3)
    driver.save_screenshot('search_results.png')
 
    driver.quit()
 
if __name__ == '__main__':
    _main()

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です