28
31

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 5 years have passed since last update.

CentOS7×Chromeでスクレイピング環境を構築するチュートリアル

Last updated at Posted at 2019-04-04

目的

スクレイピングをするための環境をセットアップする。
スクレイピングの実際の実装部分にはほぼ触れません。

いざやろうとすると何度も同じ事を調べていたり、
統一的な情報がまとまってなかったりすることに気づいたので
備忘録として残しておこうと思いました。

特に初心者は、ChromeのバージョンChromeDriverのバージョンの互換性で
予期せぬエラーが出て時間を浪費することがあります。
本記事は、任意のバージョンのChromeをインストールする手順も紹介します。

環境

  • CentOS 7
  • Ruby 2.5.x
  • gem selenium-webdriver

CentOSの起動

Vagrantを使います。
CentOS7のイメージを使って起動してください。
Vagrantについては詳しい記事がたくさんあるのでここでの説明は割愛します。

設定を日本にする

Vagrant等の仮想環境はなぜか初期設定がドイツになっていることがあります。

▼タイムゾーンを変更

CEST は 中央ヨーロッパ夏時間 のことで+02:00です。

$ date
Sun Mar 31 06:13:30 CEST 2019
$ sudo timedatectl set-timezone Asia/Tokyo
$ date
Sun Mar 31 13:14:23 JST 2019

JSTになりました。

▼ロケールを変更

現在のロケールを確認。

$ locale
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=

ドイツですね。

localectl list-locales で使用できるロケールを探します。

$ localectl list-locales | grep -i ja
ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc

localectl set-locale で日本語に設定します。
この時点では locale で状態を確認しても変わってませんが、
ログインし直すと反映されます。
localectl だと変更後の状態をすぐに確認できます。

$ sudo localectl set-locale LANG=ja_JP.utf8
$ localectl
System Locale: LANG=ja_JP.utf8
VC Keymap: de
X11 Layout: de

▼キーマップの変更

これで設定はほぼ終了です。
このままでも普通に問題なく使えるのですが、
クローリングを行うにあたっては、もう一つおまじないが必要です。
キーマップの変更です。

$ localectl status
System Locale: LANG=ja_JP.utf8
VC Keymap: de
X11 Layout: de

ブラウザでキー入力を行う際に、意図しない文字が入力されてしまのを防ぐために、
キーマップも日本語にしてやる必要があります。

使用できるキーマップの一覧を確認。

$ localectl list-keymaps | grep -i jp
jp
jp-OADG109A
jp-dvorak
jp-kana86
jp106

とりあえずjp106にしておけば問題は起きないはずです。

$ sudo localectl set-keymap jp106

余談

sshで繋いだ時にこんな感じのエラーメッセージが出てることがあります。
ドイツ語なのでわかりにくいですが、「ロケールを変更できません(UTF-8)。そんなロケールこのマシンに入ってないよー。」と言っています。

-bash: Warnung: setlocale: LC_CTYPE: Kann nicht die Locale ändern (UTF-8): Datei oder Verzeichnis nicht gefunden

これはクライアント側の問題で、iTermなどのターミナルソフトを使っていると、
sshをした時にクライアント側の環境変数を引き継ぐ設定になっていることがあるためです。

iTermではPreferences>Profiles>Terminalの下の方にある
Set locale variables automatically のチェックを外すことで解消できます。
 2019-04-04 16.57.09.png

Chromeのインストール

デフォルトのyumリポジトリにはないので追加します。

$ sudo vi /etc/yum.repos.d/google-chrome.repo
/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
$ sudo yum update

最新の安定板をインストールします。

$ sudo yum install google-chrome-stable
$ google-chrome --version
Google Chrome 73.0.3683.86

2019/04/04現在で、Linuxでは73.0.3683.86が安定バージョンとなります。

ChromeDriverのインストール

インストールしたChromeのバージョンに合わせるのがポイントです。
マイナーバージョンの違いでも動かなくなることがあるのでなるべく近しいバージョンを探しましょう。
リリースの情報はここで確認できます。
バージョン一覧はここから探せます。

$ wget https://chromedriver.storage.googleapis.com/73.0.3683.68/chromedriver_linux64.zip

任意のディレクトリにインストール => 解凍 => パスを通します。

# コマンドが入っていない場合
$ sudo yum -y install unzip 

$ unzip chromedriver_linux64.zip
$ sudo mv chromedriver /usr/local/bin/
$ sudo chmod 755 /usr/local/bin/chromedriver
$ rm chromedriver_linux64.zip
$ chromedriver --version
ChromeDriver 73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72)

Rubyのインストール

依存ライブラリをインストール

$ sudo yum install -y git openssl-devel readline-devel zlib-devel 

rbenvとruby-buildをインストール

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
$ sudo ~/.rbenv/plugins/ruby-build/install.sh

とりあえず2.5.5にします。

$ rbenv install 2.5.5
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ rbenv global 2.5.5

だん。

サンプルのプログラムを書く

スクショを撮る

Qiitaにアクセスしてスクリーンショットを撮るシンプルなプログラムです。
Productionではwaitで書くべきですが、sleepで適当に描画を待ちます。

sample.rb
require 'selenium-webdriver'

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
begin
  driver = Selenium::WebDriver.for :chrome, options: options
  driver.get "https://qiita.com/"
  sleep 5
  driver.save_screenshot "#{Time.now.to_i}.png"
ensure
  driver.close unless driver.nil?
  driver.quit unless driver.nil?
end

gemをインストールして実行します。

$ gem install selenium-webdriver
$ ruby sample.rb

以下のようなスクリーンショットが撮れれば一旦は成功です。

1554368305.png

ローカライズ

見ての通りスクショでは英語のページが表示されています。
これを日本語にしたいので、ブラウザの言語を日本語に設定します。

sample.rb
# 以下の1行を追加
options.add_argument("--lang=ja")

豆腐になったということはちゃんと言語設定ができている証拠です。
日本語フォントが不足しているのでこういう表示になります。
1554369049.png

日本語フォントのインストール

定番はIPAです。

$ sudo yum install -y ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts

1554369264.png

きれい!

P.S. 任意のバージョンのChromeのインストール

ここから任意のバージョンのパスを探してインストールします。

$ wget http://dist.control.lth.se/public/CentOS-7/x86_64/google.x86_64/Packages/google-chrome-beta-56.0.2924.59-1.x86_64.rpm
$ sudo yum localinstall google-chrome-beta-56.0.2924.59-1.x86_64.rpm

すでに安定版が存在する場合は、削除すると任意のバージョンに差し変わります。

$ sudo yum remove google-chrome-stable
$ google-chrome --version
Google Chrome 56.0.2924.59 beta

これでChromeのバージョンの変更は完了です。
さて、これで先ほどのプログラムを実行すると、クラッシュします。

 unknown error: Chrome failed to start: exited abnormally (Selenium::WebDriver::Error::UnknownError)
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Linux 3.10.0-229.el7.x86_64 x86_64)

表示されるメッセージは様々ですが、原因はChromeDriverとのバージョンの互換性であることがほとんどです。
この手のエラーはググってもなかなか根本的な原因にたどり着かないので、初心者がハマりやすいところです。
ものによっては、「このバージョンなら動く〜」みたいなメッセージが表示されることもあります。

前述の手順に従って、ChromeDriverのバージョンも互換性のあるものに変更しましょう。
互換性は以下のようになっています。

Chrome ChromeDriver
74 74
73 73
71-73 2.46
70-72 2.45
69-71 2.44
69-71 2.43
68-70 2.42
67-69 2.41
66-68 2.40
66-68 2.39
65-67 2.38
64-66 2.37
63-65 2.36
62-64 2.35
61-63 2.34
60-62 2.33
57+ 2.28
54+ 2.25
53+ 2.24
51+ 2.22
44+ 2.19
42+ 2.15

以上です。
ご査収ください。

28
31
0

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
28
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?