UbuntuでSeleniumを動かしてスクレイピングを行う【Python】

UbuntuでSeleniumを動かしてスクレイピングを行う【Python】 サーバー

Ubuntuサーバーでウェブスクレイピングを実行したい人向けの記事です。
ワンランク上のスクレイピングシステムを目指す人向けとも言えます。

デスクトップ版のUbuntuなどの場合は、次の記事をご覧ください。

この記事では、Ubuntu(サーバー)にSeleniumをインストール方法を解説しています。
出来る限りインストールは、aptコマンドで実施しています。

本記事の内容

  • Ubuntu(サーバー)でSeleniumを動かす理由
  • インストール環境
  • Seleniumのインストール
  • Google Chromeのインストール
  • WebDriver(ChromeDriver)のインストール
  • Seleniumの動作確認

それでは、上記に沿って解説を行っていきます。

Ubuntu(サーバー)でSeleniumを動かす理由

個人的に、あるサイトを常時監視したい要件が出てきました。
機械学習用のデータの場合であれば、一度でもデータを収集したら終わりです。
それに対して、今回の要件は常時監視となります。

そのため、定期的にバッチで対象サイトをスクレイピングすることになります。
常時稼動させる以上は、サーバーでの稼動が前提です。

このような理由により、UbuntuでSeleniumを動かすことにしました。
そして、その過程をまとめています。

対象サイトのアクセス対策次第では、IP分散が必要かもしれません。
複数台でスクレイピングすれば、IPでのアクセス禁止も受けないはずです。

このこともあり、構築手順をまとめています。
いわゆる自分用メモと言うヤツですね。

実際、すでに次の記事を数回は利用しています。
ブログ運営のメリットです。

では、実際にインストール作業を進めていきましょう。
まずは、インストール環境の確認です。

インストール環境

サーバー上でSeleniumを動かすためには、以下の3つが必要です。

  • Selenium
  • Google Chrome
  • WebDriver(ChromeDriver)

ただ、これらをインストールする前提条件があります。
それらをまとめて以下で説明します。

サーバーマシン

サーバーは、格安VPS(月額349円)です。
契約方法から設定までを次の記事にまとめています。

OS

OSは、Linuxです。
詳細は、以下。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.5 LTS
Release:        18.04
Codename:       bionic

プログラム言語

Selenium自体は、複数のプログラム言語に対応しています。
今回は、Python上での利用です。
何より、スクレイピングはPythonでやるのがベストと言えます。

  • Python
  • pip パッケージ マネージャー

Python

$ python3 --version
Python 3.6.9

普通は、OSをインストールした時点でインストール済みです。
万が一、インストールされていない場合はインストールします。

Python公式
https://www.python.org/

pip パッケージ マネージャー

Seleniumのインストールで必要となります。
pipを使って、Pythonに必要なライブラリ管理をします。
PHPにおけるPEARのようなモノです。

$ pip3 --version
Command 'pip3' not found, but can be installed with:
sudo apt install python3-pip

インストールされていない場合は、以下の手順でインストール。

$ sudo apt update
$ sudo apt install python3-pip

インストールの確認をします。

$ pip3 --version               
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)

pipのインストールは完了です。

Seleniumのインストール

ここからが、メインの内容となります。
主役とも言えるSeleniumのインストールコマンドは以下。

$ sudo apt install python3-selenium

あっけないですね。
これだけでSeleniumがインストールされます。

確認方法は、単独では困難ですね。
ここでは、エラーなく終わればOKというスタンスでいいでしょう。

Google Chromeのインストール

Google Chromeと言えば、ブラウザですね。

Windowsマシンでは、特にChromeのインストールに触れることありませんでした。
実際、次の記事ではGoogle Chromeのインストールには言及していません。

Seleniumとは?という方は、上記の記事をご覧ください。
Seleniumに関する理解が進むはずです。
同時に、WebDriver(ChromeDriver)についても理解が進みます。

話をGoogle Chromeに戻しましょう。
基本的には、サーバーにブラウザなんて入れません。

しかし、今回はSeleniumのためにGoogle Chromeをインストールします。
aptでインストールを管理する方式を採用します。

ざっとコマンドを並べます。

$ cd /tmp
$ wget https://dl.google.com/linux/linux_signing_key.pub
$ sudo apt-key add linux_signing_key.pub
$ echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list
$ sudo apt-get update
$ sudo apt -f install -y
$ sudo apt-get install google-chrome-stable

インストールを確認します。

$ google-chrome --version
Google Chrome 86.0.4240.75

インストール完了です。
以上、サーバーへのGoogle Chromeインストールです。

WebDriver(ChromeDriver)のインストール

Seleniumは、あくまでプログラムに過ぎません。
Seleniumの中にブラウザの機能があるわけでもありません。

Seleniumとは、ブラウザを操作するために作られた専用のプログラムです。
だからこそ、上記でGogole Chromeをインストールしました。

ただ、Seleniumから直接ブラウザを操作できるわけではありません。
Seleniumとブラウザの間にWebDriverが必要となります。

この部分の詳細は、上記で挙げた記事をご覧ください。
もっと詳しく説明しています。

今回は、Gogole Chromeをブラウザとして利用します。
そのため。インストールするWebDriverはChromeDriverとなります。

では、ChromeDriverをインストールしましょう!ですが。
なんと、すでにChromeDriverはインストール済みなのです。

「python3-selenium」をインストールした時点で、一緒にインストールされているのです。
確認してみましょう。

$ chromedriver -v
ChromeDriver 85.0.4183.121 (a81aa729a8e1fd413943a339393c82e7b8055ddc-refs/branch-heads/4183@{#1864})

ここで、一つ重要なことを確認しておきます。
以下は、インストールしたモノをバージョンとともに表示しています。


バージョン
ブラウザ(Google Chrome)86.0.4240.75
WebDriver(ChromeDriver)85.0.4183.121

このケースはOKです。
OKではないケースがあります。

それは、次の場合です。
WebDriverのバージョン < WebDriverのバージョン

WebDriverのバージョンの方が大きい場合は、Seleniumが正しく起動しないことあります。
よって、このバージョンに大小については要確認です。

【サンプルコード】Seleniumの動作確認

Seleniumの動作確認用のサンプルコードです。
selenium_test.pyという名称で保存しています。

# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

CHROMEDRIVER = "/usr/bin/chromedriver"

def get_driver(init_flg):
    
    # ヘッドレスモードでブラウザを起動
    options = Options()
    options.add_argument('--headless')


    # ブラウザーを起動
    driver = webdriver.Chrome(CHROMEDRIVER, options=options)
    
    return driver

if __name__ == '__main__':
    
    url = "https://example.com/"
    
    # ヘッドレスモードでブラウザを起動
    options = Options()
    options.add_argument('--headless')

    # ブラウザーを起動
    driver = webdriver.Chrome(CHROMEDRIVER, options=options)
    
    # urlにアクセス
    driver.get(url)
    
    title = driver.find_element_by_tag_name("h1")
    print(title.text)
    
    # ブラウザ停止
    driver.quit()

指定URLにアクセスして、そのページのh1タグのテキストを取得します。
簡単なスクレイピングです。

この定数には、ChromeDriverのパスを指定します。

CHROMEDRIVER = "/usr/bin/chromedriver"

パスの確認は、以下のコマンドで可能です。

$ which chromedriver
/usr/bin/chromedriver

このプログラミングの実行結果は以下。

$ python3 selenium_test.py
Example Domain

問題なくSeleniumが動いていますね。
以上より、Ubuntu(サーバー)でSeleniumを常時稼動させることができます。

追記 2021年11月28日
Selenium 4では、上記コードが動かない可能性があります。
headlessモードは、確実に有効ではないでしょう。
その場合は、次の記事の対応方法を参考にしてください。

タイトルとURLをコピーしました