ScraperWikiをつかってみた

はじめに

 もうずいぶん前のネタになりますが、2011年10月にCode4Lib Journalというところに、

「Controlled Terms or Free Terms? A JavaScript Library to Utilize Subject Headings and Thesauri on the Web」

という記事をのせてもらいました。

 記事の内容としては、検索やタギングの場面で「各種キーワードセット(ここでは典拠や件名標目)」を活用してみようよという話で、その足がかりとして「covo.js」というJavaScriptライブラリを作ってその「各種キーワードセット」を簡単に呼び出せるようにするところからはじめてみました。実際にはじめてみると「各種キーワードセット」がウェブ上にあったりなかったり、あっても使いづらかったりするので、記事中では「各種キーワードセット」の状態を下記の4つにざっくり場合分けし、それぞれクライアントサイドJavaScriptで処理するためのやり方を記事中で整理してみました。

  • Pattern 1: Web API with JSONP
  • Pattern 2: Web API without JSONP
  • Pattern 3: Without Web API
  • Pattern 4: Not on the Web

 このPattern 3でキーワードセットがウェブ上に確かに存在するけれどもプレーンHTMLでどうにも使いづらいよーというものをJavaScriptで読み込むためのひとつの方法としてScraperWikiを用いたやり方を紹介しています。まず、このScraperWikiというサービスを使って事前にHTMLから必要な情報をスクレイピングしておきます。ScraperWikiでスクレイピングしたデータはJSON形式でデータを吐き出してくれるのでJavaScriptで処理できますよー、という話です。

ScraperWikiに関する日本語記事

「ScraperWikiをためしてみよう」

「スクレイピングするなら ScraperWiki 使うといいよ」

といった秀逸な記事がありますのでぜひそちらもご覧ください。

ScraperWikiの使い方

無料プランと有料プラン

 ScraperWikiは基本的には無料で使えます(2012/4/22 現在)。有料プランにするとprivateモードで使えたり、スクレイピングの頻度を「1時間ごと」に設定できたりするようです。ですので、無料プランで使っている場合は、Scraperのスクレイピング用のコードもデータストアのデータもすべて公開、ということになります。

Scraperと二つのツール

 基本的に必要な機能はすべてScraperWikiが備えていますので必要な環境としては「とりあえずブラウザさえあれば大丈夫」です。実際の作業の流れとしては、まずここでアカウントを作りましょう。名前, ユーザー名, パスワードを設定し利用規約に同意すればアカウントが発行されます。ログインできたらさっそく「Scraper」を作ります。このScraperというのは、たとえば「今日は○○からスクレイピングして○○のデータセットを作りたいからScraperを一つ作るか」という感じで、スクレイピングのターゲットごと、あるいは結果として作られるデータセットごとに一つ作るようなイメージを思い浮かべていただけると分かりやすいかと思います。そのScraperごとにオンラインコードエディタデータストアという二つのツールが用意されています。

  • オンラインコードエディタ上でコードを書く
  • プログラム実行、スクレイピング、データストアに記録
  • Web APIを使ってデータストアからデータを取り出す

という流れで進めていきます。

コーディング

 Scraperを作ったらスクレイピングするためのコードを書きましょう。ScraperWiki上で実行できるプログラムは、

 の3つです。

f:id:haseharu:20120422093239p:plain

 これが実際のオンラインエディタのスクリーンショットです。こんな風にオンラインエディタを使ってがしがしコードを書くことができます。もちろん手元のエディタで書いてコピペしても大丈夫です。コードを書き終えたら「Run」ボタンで実行しデータストアにスクレイピングしたデータをがんがん記録していきます。

スケジュール

 スクレイピングの対象となるターゲットは更新されないものもあれば、更新されるターゲットもあってさまざまだと思います。こうした「スクレイピングターゲット先の更新」にも対応できる仕組みになっていて、各Scraperごとに5種類のスケジュールを設定して、スクレイピングの頻度を設定することができます。

  • 手動 (Don’t schedule)
  • 毎月 (Run every month)
  • 毎週 (Run every week)
  • 毎日 (Run every day)
  • 1時間ごと (Run every hour) //有料プランのみ 

データストアとWeb API

  データストアはSQLiteなので保存されたデータは、下記のようなSQLを発行し取り出すことができます。

select * from `swdata` limit 10

 また、データを取り出す際に以下の4つのデータ形式を指定して取り出すことができます。

 こうしたSQL文の発行とデータ形式の指定はWeb APIを通じて行うことができます。

https://api.scraperwiki.com/api/1.0/datastore/sqlite?format=jsondict&name=inis-thesaurus&query=select%20*%20from%20%60swdata%60%20limit%2010

 このHTTP GETリクエストはご自身でがしがし書いても構わないのですが、ScraperWiki上で(上の3つ以外にも)必要な情報をぽんぽんぽんと入力していくだけで、
 

f:id:haseharu:20120422100655p:plain

こんなふうに「Step2」のところに自動生成されたGETリクエストが表示されるので「あのパラメータ名なんだっけ?」とか「あー、URLエンコードしなきゃねー」とかそういうことがなくなるので覚えることが苦手だったりそのひと手間が面倒なんだよなーという自分みたいなユーザーにとっては大助かりだと思います。ちなみに「Run」を押すと下にSQLの結果が指定したデータ形式で表示されます。
 Web APIにはこの他にもいくつもの機能があります。詳細はDocumentをご覧ください

Viewというもう一つの機能

 今回はスクレイピングをするためのコードをオンラインエディタで書いて実行してデータストアに記録する、という「Scraper」機能を紹介しました。実は、このScraperとは別に「View」という機能があります。そちらを使うと各データストアのデータを横断して処理し、さらに細かいデータハンドリングが可能になるようです。至れり尽くせりとはまさにこのことです。

かんそう

 感想としては「使っててめちゃめちゃ楽しい」です。これに尽きます。単純にスクレイピングするだけなら別にわざわざScraperWikiを使う必要もないのですが、スクレイピングしたデータをデータストアに保持し、Web APIを通じてあれこれ引き出せるところがかなりcoolでした。データストア上のデータはSQLで取り出せるだけでなく「View」機能までついていて可能性がぐんと広がります。また、Documentもそれなりにそろってますし、ツールとして親切設計で使っていてストレスを感じなかったです。アイディア次第でいろいろなシーンで活用できる可能性を秘めたWebサービスではないかと思いました。楽しいですよ。ぜひ。