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()