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

# 概要

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

# 手順

## 前提

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

## pipのインストール

### ダウンロード

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

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

<img width="1247" alt="screencapture- 2017-12-09 21.51.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/0929c1ef-7cc2-0bb0-3ef4-6c7204724462.png">


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

```shell:command
sudo python get-pip.py
```
<img width="727" alt="screencapture- 2017-12-09 21.51.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/facc13e3-9684-31bb-89ce-095f485a739e.png">


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

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

### 確認

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

```shell:command
pip --version
```

<img width="535" alt="screencapture- 2017-12-09 21.53.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/aa602eb6-a8dc-2ab4-c0a9-5cb1d164c119.png">

## 使い方

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

### エラー回避

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

```shell:command
sudo pip install selenium
```

<img width="463" alt="screencapture- 2017-12-10 14.03.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/d6998c8f-c6ee-7794-7565-3b86c737e804.png">

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

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

```shell:command
sudo cp /usr/local/bin/pip /usr/sbin/
```

### 確認

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

```shell:command
sudo pip install selenium
```

<img width="721" alt="screencapture- 2017-12-10 14.02.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/feaef3f0-1123-8097-0eb8-77949884fb03.png">

## 実装

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

```python:sample.py
from selenium import webdriver
import time

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

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

```shell:command
python sample.py
```

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

```shell: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.
```

<img width="903" alt="screencapture- 2017-12-11 10.36.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/3425d7fb-e387-7b7c-f834-05657de5f721.png">

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

## PhantomJSのインストール

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

### yum関連のインストール

```shell:command
sudo yum install fontconfig freetype freetype-devel fontconfig-devel libstdc++ 
```

<img width="1256" alt="screencapture- 2017-12-12 11.10.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/564a5308-bc01-7e37-340c-5d592631c3c6.png">

### 圧縮ファイルの取得

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

<img width="1258" alt="screencapture- 2017-12-12 11.15.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/d0df5e5e-c608-00bc-605f-6c30f5de6e5d.png">

### 解凍

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

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

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

### 確認

```shell:command
phantomjs -v
```

<img width="353" alt="screencapture- 2017-12-12 11.50.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/57515428-0501-1516-e8d7-7098078e8ab5.png">

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

```shell:command
python sample.py
```

<img width="441" alt="screencapture- 2017-12-12 11.52.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/113654/b4b2ae76-b551-2709-725a-3347d4e36296.png">

無事に取れましたね！！

# 終わりに

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

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