【Python】自動でサイトのキャプチャを撮ってくるツールを作ってみた

## 概要
ExcelベースのURLリストの情報から自動でサイトを辿り、キャプチャ（PC/SP）を保存する機能です。
同時に保存したキャプチャは、新しく生成したExcelに添付されます。

## 動作環境
確認済み環境
macOS Sierra 10.12.6
Python 3.5.0
※Windows 確認中

## ソースコード
https://github.com/Shuny125/capture-web-scraping

```python
import xlrd
import os
import xlsxwriter
import math
import time
from selenium import webdriver

## -------------------------------------
## ExcelのURLからスクショを保存
## -------------------------------------

## ExcelからURLを取得
book = xlrd.open_workbook('url.xlsx')
sheet = book.sheet_by_index(0)

## 取得した情報を保存しておくための入れ物
IDLIST = []
TITLELIST = []
URLLIST = []

## IDを取得
for row in range(sheet.nrows):
    ## セルの値（URL）を取得
    ID = sheet.cell(row, 0).value
    IDLIST.append(ID)

## タイトルを取得
for row in range(sheet.nrows):
    ## セルの値（URL）を取得
    TITLE = sheet.cell(row, 1).value
    TITLELIST.append(TITLE)

## PCキャプチャ
## ブラウザを起動（ページ全体をキャプチャしてくれるためSafariを使用）
driver = webdriver.Safari()
driver.maximize_window()

##  URLを取得（キャプチャ保存）
for row in range(sheet.nrows):
    ## セルの値（URL）を取得
    URL = sheet.cell(row, 2).value
    URLLIST.append(URL)

    ## 画面遷移
    driver.get(URL)

    ## 遷移直後だと崩れた状態でスクショされる可能性があるため、1秒待機
    time.sleep(1)

    ## 画面キャプチャを保存
    FILENAME = os.path.join(os.path.dirname(os.path.abspath(__file__)), IDLIST[row] + '.png')
    driver.save_screenshot(FILENAME)

## ブラウザを閉じる
driver.quit()

## SPキャプチャ
## ブラウザを起動（ページ全体をキャプチャしてくれるためSafariを使用）
driver = webdriver.Safari()
## UA判定が必要な場合は上記を削除し、以下を使用
# USER_AGENT = "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A356 Safari/604.1"
# driver = webdriver.PhantomJS(desired_capabilities={'phantomjs.page.settings.userAgent': USER_AGENT})
driver.set_window_size(375, 720)

##  URLを取得（キャプチャ保存）
for row in range(sheet.nrows):
    ## セルの値（URL）を取得
    URL = sheet.cell(row, 2).value

    ## 画面遷移
    driver.get(URL)

    ## 遷移直後だと崩れた状態でスクショされる可能性があるため、1秒待機
    time.sleep(1)

    ## 画面キャプチャを保存
    FILENAME = os.path.join(os.path.dirname(os.path.abspath(__file__)), IDLIST[row] + '_sp.png')
    driver.save_screenshot(FILENAME)

## ブラウザを閉じる
driver.quit()


## -------------------------------------
## 保存したスクショをExcelに添付
## -------------------------------------

## 添付した数をカウントするための変数
count = 0

for i in range(math.ceil((row+1)/10)):
    ## 画像添付用のExcelを作成
    workbook = xlsxwriter.Workbook('capture' + str(i+1) + '.xlsx')

    ## 残り添付数を計算
    if (row+1)-count >= 10:
        num = 10
    else:
        num = (row+1)%10

    for j in range(num):
        ## シートを追加
        worksheet = workbook.add_worksheet(IDLIST[count] + '_' + TITLELIST[count])

        ## 対象ページの情報を記載
        worksheet.write('A1', IDLIST[count])
        worksheet.write('A2', TITLELIST[count])
        worksheet.write('A3', URLLIST[count])

        ## 画像を添付
        IMAGE_SP = IDLIST[count] + '_sp.png'
        IMAGE_PC = IDLIST[count] + '.png'
        worksheet.insert_image('B4', IMAGE_SP, {'x_scale': 0.45, 'y_scale': 0.45})
        worksheet.insert_image('H4', IMAGE_PC, {'x_scale': 0.3, 'y_scale': 0.3})

        ## 添付するごとにカウントを増やす
        count = count+1

    ## 10シートごとにExcelを閉じる
    workbook.close()
```
※キャプチャ保存だけ使用する場合は、「保存したスクショをExcelに添付」以降を削除

## 導入手順
### Python
https://www.python.org/downloads/windows/  
3系の最新バージョンをインストール  
→「Download Windows x86-64 executable installer」

ターミナルを開いて、以下のコマンドを実行。

```
$ python —V
```
バージョンが表示されたらOK。

### pip
ターミナルを開いて、以下のコマンドを実行。

```
$ easy_insatll pip
```

### selenium
ターミナルを開いて、以下のコマンドを実行。

```
$ pip install selenium
```

### Python ライブラリインストール
ターミナルを開いて「requirements.txt」と同じディレクトリにいる状態で、以下のコマンドを実行。

```
$ pip install -r requirements.txt
```

### Safari 設定
Safari の「環境設定」から「詳細」タブを開き、「メニューバーに"開発"メニューを表示」にチェック。

表示された「開発」メニューから「リモートオートメーションを許可」にチェック。


## 使用方法
### URLリストの編集
「url.xlsx」に必要な情報を入れてください。
A列：ID
B列：タイトル
C列：URL

### 実行
ターミナルを開いて、以下のコマンドを実行。

```
$ python capture.py
```

## まとめ
Python 初心者ということもあり、
泥臭く書いた感があるので、参考程度にお使いいただければ幸いです。

また、Windows の導入手順もまとまり次第アップする予定です。