スクレイピングに興味を持ったいきさつと、その実現が困難なことを述べてみようと思う。
10年ほど昔からデータを取り込むために、一時的に加工することがある。
文字コードを変換したり、スペースをカンマに変えたり、数字にカンマを入れたりする。ちょっとしたプログラムを書けばできる。大昔は、awkを使ったり、PerlやPHPなどを使ってやる。古くはAppleScriptなどを使ってやったこともある。
ちょっとしたプログラム「1行プログラム」で実現する類だ。
手元にあるファイルではなくて、Webページを対象にするのはどうだろうかと、次に考える。
そのとき、オライリーのSpidering Hacksという本が出版された。世の中には同じことを考える人が山のようにいる。
だけど、仕事の片手間に必要に迫られてそのプログラムをつくるけれど、そのスクレイピングを専門にやる人はいない。ノウハウを積み上げれば、優位に立てると考えた。
独立してから時間があるので、楽天ブログのバックアップ用ソフトや「Cybozu、Desknets, Google Calendar対応スケジュール同期」ソフトをスクレイピングを使って作っていった。
一つ一つ手作りで作っていけばなんとかなるんだけれど、大きな山がいくつか見え始めていた。
- 認証(IDでログインして情報を取得すること)
- HTMLの変更への対応
- 欲しいデータの特定(URIとWeb内の位置)
この中では認証が一番やっかいだ。
ログインしないと情報が取れない場合がある。これはデータの2次利用という規則違反の場合もあるが、「本人が目で見える情報を個人だけが利用するのは良いのではないか」という基準で考えるとぎりぎりいいのではないかととらえている。貴重なデータは会社のイントラネットの中にデータがある場合にどうにか取り出したいという顧客のニーズがあるかもしれない。
HTMLの変更への対応もやっかいだ。
企業がサービスとして公開している、Webページはときどき変更がある。
デザインを変えたり、アプリケーションを作り直したりする。その変更は、もちろん発信者の都合で、スクレイピングする方のことは一切考えない。突然で変更方法が通知されない(勝手にやっていることだから当然だ)。それをできれば自動的に修正すること、自動でなくても変更があったことを伝え、容易に修正できるようにしておくようにできればいい。
欲しいデータの特定も同様にやっかいだ。
表示されているWebの画面で、どの部分が欲しいデータだろうか?
それをWeb画面上で、これといって指定しなくてはいけない。そしてそのデータはどのように表示されているのかと示す必要がある。表なのか、数ページに現れるデータの一部なのか、そういったことを分析する必要がある。
結局、「人がブラウザを使ってWebにアクセスして情報を得る」という自然にやっていることをプログラムにやらせるのだが、そんなAI的なことは簡単に実現できるものではない。せめて、その一歩二歩前に何かやることがあるだろう、それで何かできないかということなんだ。
同じようなことを考えている会社があって、とてもよくできたサービスを行っている。
Dapper
ここに負けたと思っていたが、結局作る人が異なると微妙に違う目的のものができるので、あきらめずにゆっくりと作り続けている。