ビジュアルスクレイピングツールとは、スクレイピングをGUIから行うことのできるツールのことです。ここでは、scrapinghubの提供するportiaの使い方を書きます。
2種類の使い方
使い方には2種類あります。
- scrapinghubにサインアップし、SaaSとして使う。
- portiaを自前のサーバに入れて使う。
scrapinghubから使う場合、portiaで作成したスパイダーをscrapy cloudから実行する形態なので、料金プランはscrapy cloudの料金になります。
無料プランの制約は以下です。
- 同時クロール数: 1
- データ保存期間: 7日
- クロールの最大継続実行時間: 1時間
有料プランは、unitの追加という形態をとります。
1 unit = 1GB RAM + 同時クロール数プラス1 + 最大継続時間のリミット解除 = $9/月
https://scrapinghub.com/scrapy-cloud#pricing
それに対し、portiaを自前のサーバに入れて使う場合は、scrapinghubの料金を支払う必要もなく、制約もありません。
portiaを実行する
それでは、portiaの最も簡単な実行方法を書きます。 dockerをインストールしてから、以下のコマンドを実行してください。
$ mkdir ~/data $ docker pull scrapinghub/portia $ docker run -i -t --rm -v ~/data:/app/data/:rw -p 9001:9001 scrapinghub/portia
http://localhost:9001 にアクセスすればportiaが使えます。
portiaの基本
portiaの基本を説明します。
基本1: プロジェクトとスパイダー
portiaは、「プロジェクト」と「スパイダー」から構成されます。各プロジェクト内に複数のスパイダーを作成できますが、スパイダーとは、あるドメインに対してクローリング・スクレイピングする方法を定義したものだと考えてください。
基本2: スタートページとリンク抽出方法
スタートページとは、クローリングの起点です。スパイダーは起点からリンクを辿ることでデータを抽出します。典型的な方法として、サイトの記事一覧ページ等にページ番号を渡すことで起点を定義する方法があります。
リンク抽出方法には、以下の種類があります。
- 自動
- 内部リンクをすべてたどる
- 正規表現に合致するリンクをたどる
- たどらない
基本3: サンプルページとデータ抽出
サンプルページとは、データ抽出を行いたいページを定義するものです。サンプルページの例としては、ニュース記事の記事ページ、ショッピングサイトの特定の商品ページ、などがあります。
サンプルページを特定すると、サンプルページからどのデータを抽出するのか選ぶことができます。Web UIベースのツールなので、表示されたサンプルページから抽出したい箇所をクリックすると抽出箇所として選ばれます。例えば、商品名、価格、出版日、記事本文などを抽出します。
抽出箇所として選ばれたフィールドは、正規化することができます。出版日をdate型として定義すると、日付として正規化されます。価格をprice型として定義すれば、数値だけが抽出されます。
基本4: スパイダーの実行
スパイダーの実行方法は、Scrapy Cloudを使う方法と、portiacrawlコマンドを使う方法、scrapyスクリプトを実行する方法があります。
実行方法の例
GUIベースのツールであるため、静的なスクリーンショットを貼るよりも、動画を見たほうが早いと思います。 https://learn.scrapinghub.com/portia/
portiacrawlでスパイダーを実行
スパイダーを実行するには、portiaのdockerコンテナにログインして以下のコマンドを実行します。
$ mkdir /app/data/exported_data $ portiacrawl /app/data/projects/PROJECT_NAME SPIDER_NAME -o /app/data/exported_data/SPIDER_NAME.jl
参考
[1] https://www.youtube.com/channel/UCYb6YWTBfD0EB53shkN_6vA [2] https://learn.scrapinghub.com/portia/ [3] https://scrapinghub.com/ [4] https://github.com/scrapinghub/portia [5] http://portia.readthedocs.io/en/latest/installation.html