import.ioのアプリケーション版でスクレイピングをやってみる

# はじめに
はてブにimport.ioというスクレイピングツールが紹介されている。
http://b.hatena.ne.jp/entry/nelog.jp/import-io
このツールを使うことができればスクレイピング用のコードを記述しなくともデータの取得ができる。
ウェブサービス版だけでなくアプリケーション版についても少しだけ使ってみたのでノウハウを書き出しておく。
例がひどいかもしれないがそこは気にしてはいけない。

# ウェブサービス版とアプリケーション版の違い
## ウェブサービス版
- 登録などもなく簡単に使える
- ページ内に複数のリストがある場合はどこが取得されるか分からない
  - [このページ](http://lain.gr.jp/mediadb/media/5309)をウェブサービス版のスクレイピングをかけると以下の様な取得結果となる

![import_io_web_01.PNG](https://qiita-image-store.s3.amazonaws.com/0/90126/07b582ea-de8a-e1e5-a18b-2985b7ec7df8.png)


## アプリケーション版
- アプリケーションのインストールが必要
- アカウントの登録が必要(githubやgoogleのアカウントでOK)
- スクレイピングルールをAPIとして登録できる
- APIを複数のウェブページに適応し、それをまとめて実行し、1つのCSVとしてDLできる

# アプリケーション版のインストール
[import.ioのpricing](https://import.io/pricing)からダウンロード後、インストールするだけである。
アカウントも必要になるが登録、利用は無料である。

# アプリケーション版について
## 概要
アプリケーション版で行うことはスクレイピングルールであるAPIを作成し、
それを対象となるウェブページに適応することである。

## 目的
.lainの作品別のページ([ここ](http://lain.gr.jp/mediadb/media/5309)とか[ここ](http://lain.gr.jp/mediadb/media/5310)とか)にAPIを実行し、以下の様なデータの取得を目指す。

| title                               | media    | start_date    | chara      | cv       |
|-------------------------------------|----------|---------------|------------|----------|
| アイドルマスター シンデレラガールズ | TVアニメ | 2015年1月9日  | 島村卯月   | 大橋彩香 |
| アイドルマスター シンデレラガールズ | TVアニメ | 2015年1月9日  | 渋谷 凛    | 福原綾香 |
| …                                   | …        | …             | …          | …        |
| 聖剣使いの禁呪詠唱                  | TVアニメ | 2015年1月11日 | 灰村諸葉   | 石川界人 |
| 聖剣使いの禁呪詠唱                  | TVアニメ | 2015年1月11日 | 嵐城サツキ | 竹達彩奈 |
| …                                   | …        | …             | …          | …        |

## APIの新規作成
MyData画面からNewと書いてあるセレクトボックスを選択することで新しいAPIを作成できる。

![import_io_app_01.PNG](https://qiita-image-store.s3.amazonaws.com/0/90126/829817bd-8527-3bf0-48f1-720ad00292ae.png)

Magicはウェブサービス版で使われている機能と同じで細かい設定をすることができない。
そこで今回はExtractorを選択してより詳しいルールのAPIを作成する。
ちなみにClassic ExtractorとAuthenticated Extractorについてはまだよく分かっていない。

APIの実装については動画やヘルプを参考にしながら行うと良い。
丸投げしているようであるが筆者もまだ分かっていないところが非常に多いため、そちらのほうが確実である。
ここで自動取得モードが適応できれば非常にラッキーである。
ちなみに筆者は確実に行うために、CSSやJSを切って、取得したい部分を2行以上ドラッグで選択というまどろっこしい手段を用いたりした。
なおスパナボタンであるadvanced setting内でxpathやregexを用いて指定することができるため、奥の手としてこれを用いることも出来る。

![import_io_app_02.PNG](https://qiita-image-store.s3.amazonaws.com/0/90126/9527096c-d666-ea2e-0d77-4b9775546770.png)

## 固定値の入力
特定のカラムに同一ページから取得した同じ値を入力したい場合はxpathで直接指定してやるとスムーズである。
xpathはchromeのデベロッパーツールから取得するのが手っ取り早い。

![import_io_app_03.PNG](https://qiita-image-store.s3.amazonaws.com/0/90126/9d3f5da5-6a84-1bd6-8b3a-25c2917b35c3.png)


スパナボタンであるadvanced settingからxpathを用いて指定することができる。

![import_io_app_04.PNG](https://qiita-image-store.s3.amazonaws.com/0/90126/a79979c6-8259-3a5b-731d-93362a028862.png)

以下のように一括で入力することができる。

![import_io_app_05.PNG](https://qiita-image-store.s3.amazonaws.com/0/90126/0c8ede89-bbb6-a826-f48e-467e958b4a6b.png)

## APIの完成
APIが完成したらDONEボタンを押してAPIに名前をつけ、保存する。
これで対象以外のページでもこのAPIを利用してスクレイピングすることが可能になる。

## 複数のウェブページに対して一括実行
MyDataページから作成したAPIとBulk Exportモードを選択し、取得対象となるページを複数入力する。

![import_io_app_06.PNG](https://qiita-image-store.s3.amazonaws.com/0/90126/3a42795c-dd70-193a-6e53-31dddc462efa.png)

少々時間はかかるが以下のように一括で取得することが出来る。

![import_io_app_07.PNG](https://qiita-image-store.s3.amazonaws.com/0/90126/6e95fd1b-521f-d94d-e2cd-4a8d67e4c98a.png)

なおCSVで出力した場合、表示されているカラムの順番と出力されているカラムの順番に差があるようである。
スクレイピング先のURLについては自動的に挿入されるようである。

![import_io_app_08.PNG](https://qiita-image-store.s3.amazonaws.com/0/90126/addd4f77-e708-319c-2457-99340200cf98.png)


# 利用雑感
非常に有用なツールであると思われるが、APIのスクレイピングルールの指定が直接できず、それをやりたいと何度も思った。
また.lainはデータの構造が2011年ごろを境に変わっているので、古いデータを取得する場合はそれに合わせたAPIを作る必要がありそうである。