Python
PhantomJS
pip
scraping
python2.7

Python + PhantomJSを使ったWebスクレイピング ①環境構築

More than 1 year has passed since last update.

概要

とある仕事でpythonでWebスクレイピング用のスクリプトを作ることになり、pipを初めて触ることになったので備忘録としてまとめます。

手順

前提

  • AWS EC2
  • python 2.7.6インストール済み
  • 細かい設定は今回は端折るので基本、sudoコマンドで実行します
  • 作業は~(ホーム)で実行
  • PhantomJSを利用

pipのインストール

ダウンロード

以下のコマンドでpipインストール用のpythonファイルをダウンロードします。

command
wget "https://bootstrap.pypa.io/get-pip.py"

screencapture- 2017-12-09 21.51.40.png

ダウンロードしたファイルを実行します。

command
sudo python get-pip.py

screencapture- 2017-12-09 21.51.52.png

※以下のワンライナーでも同様にインストール可能です。

command
curl -kL https://bootstrap.pypa.io/get-pip.py | python

確認

以下のコマンドでバージョン情報が表示されればインストール完了です。

command
pip --version

screencapture- 2017-12-09 21.53.53.png

使い方

今回はpipにてseleniumをインストールして使ってみます。

エラー回避

しかし、今のままでは以下のコマンドでinstallしようとすると、エラーが出ます。

command
sudo pip install selenium

screencapture- 2017-12-10 14.03.14.png

これはインストール先のusr/local/bin$PATHに含まれていないので、pipコマンドが認識されていません。

$PATHに追加することで対処可能ですが、今回は以下のコマンドで物理的に移動して対処します。

command
sudo cp /usr/local/bin/pip /usr/sbin/

確認

これでもう一度以下のコマンドを実行すると、正常にインストールが完了します。

command
sudo pip install selenium

screencapture- 2017-12-10 14.02.45.png

実装

以下のコードを適当なファイルに記述してください。

sample.py
from selenium import webdriver
import time

browser = webdriver.PhantomJS()
url = "http://google.com"
browser.get(url)
time.sleep(3)
print(browser.title)

そして、以下のコマンドで実行

command
python sample.py

しかし、以下のようなエラーが表示されます。

error
[ec2-user@adminserver sample]$ python sample.py
Traceback (most recent call last):
  File "sample.py", line 4, in <module>
    browser = webdriver.PhantomJS()
  File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/phantomjs/webdriver.py", line 52, in __init__
    self.service.start()
  File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/common/service.py", line 81, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'phantomjs' executable needs to be in PATH.

screencapture- 2017-12-11 10.36.46.png

これはPhantomJS自体がインストールされていないのが原因かと思われるので、別途PhantomJSもインストールする必要があります。

PhantomJSのインストール

基本的には以下のコマンドを順番に流すことでインストールは完了します。

yum関連のインストール

command
sudo yum install fontconfig freetype freetype-devel fontconfig-devel libstdc++ 

screencapture- 2017-12-12 11.10.27.png

圧縮ファイルの取得

command
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2

screencapture- 2017-12-12 11.15.30.png

解凍

command
bzip2 -d phantomjs-2.1.1-linux-x86_64.tar.bz2
sudo tar -xvf phantomjs-2.1.1-linux-x86_64.tar

シンボリックリンクの作成

command
sudo ln -sf ~/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/bin/phantomjs

確認

command
phantomjs -v

screencapture- 2017-12-12 11.50.08.png

もう一度、以下のコマンドを実行

command
python sample.py

screencapture- 2017-12-12 11.52.28.png

無事に取れましたね!!

終わりに

これでpython + PhantomJSでのスクレイピングの準備は出来たので、あとはガリガリコーディングをしていくだけですね♪

快適なスクレイピング生活を!