[広告]

2014年6月6日金曜日

ウェブスクレイパー開発記録(3) サイトの更新チェックはどうやる?

道具の選択

動物園の基本DBが出来上がって、次は情報のメンテナンスのためWEBサイトの更新チェックの方法を検討することになりました。

このころには、動物園のWEBサイトの更新情報をブログのコンテンツにしてしまおうという下心が芽生え始めていました。

さて、動物園・水族館の数は200以上。この時点では更新頻度不明です。

中にはRSSを出力している園もありますが、一部の園だけで出力してても...といった感じです。

GoogleでWEBサイトの更新チェック方法を調べたところ、大きく分類して

  • ブラウザのプラグイン
  • 専用ソフト
  • 更新チェックのWEBサービス

が見つかりました。

また、腹案として、wgetでWEBサイトの情報をダウンロードしてきてdiffをかけてしまえばいいのではないか、という考えもありました。何せ200サイトです。導入がひと手間だけれども、wgetが一番現実的ではないかとその時は思っていました。

AlertBox試用

まず試したのはFirefoxのアドオンで、AlertBoxというものです。

https://addons.mozilla.org/ja/firefox/addon/alertbox/

これにめぼしい動物園のWEBサイトを登録して、1日、2日と様子を見てみました。

少なくとも、動物園のWEBサイトの監視という目的がなければ、AlertBoxは優れたソフトウェアであることに違いありません。

WEBサイトのページの一部分の変化だけを追跡することもできます。この機能は重要で、たとえば親切な動物園の場合、本日のお天気情報がサイトに掲載されていたりしますので、こういった情報は取り除いてサイトをウォッチしないと、私にとっては意味なく毎日更新されているように見えてしまいます。

機能的には、これでだめならほかの専用ソフトや、更新チェックのWEBサービスはさらにだめだろうと感じさせるに十分なものでした。

で、十幾つかのサイトを監視したところで、どうも目的に合致していないらしいことが見えてきました。

WEBサイトが更新されていることはわかるのですが、どこが更新されたのかがわからない。AlertBoxには変化した部分を指摘する機能があるにも関わらずです。

なぜかというと、動物園・水族館側が、そういった用途を考慮していないからです。

延々と10ページ分くらいスクロールしないと全体を見られないようなページが普通にあったりします。その一部、たとえばイベント予定の日付だけが変わっていたとして、その部分が変更箇所として緑背景で強調されていたとしても、ちょっとやそっとでは見つけられないのです。結局そのページ全体を読むことになってしまいます。

新旧のページをならべて比較する機能も、こんな巨大なページを相手にしては無意味に近いです。

さらに致命的だったのが作業効率です。

意外と動物園・水族館のサイトは更新されていることが分かりました。

せいぜい週一回、イベント情報やニュースが更新されるくらいじゃないかなと予想していたのですが、熱心な園・館は毎日更新がかかります。

また一つの園・館につき、1ページだけをウォッチすれば済むという話ではありません。

結果を先に書いてしまうと、動物園・水族館200サイトをウォッチするには、1,000ページ以上を監視する必要があり、一日に更新されるサイト数は50、ページ数は100を超えていました。

1,000ページをAlertBoxに登録する手間がまず非現実的ですし、更新チェックのためのデータDLやレンダリングにかかる時間も論外です。さらにそこから更新点を目視確認する手間については上述のとおりです。

というわけで、AlertBoxで使い方を工夫すればどうにかなるというようなレベルの課題に取り組んでいるわけではないということがわかりました。

もちろん、専用ソフトや更新チェックWEBサイトも論外と思われました。

wget&diff

ならば、もう一つの腹案、すなわちwgetとdiffではどうなのでしょうか。

仕組みが動き始めてしまえば、作業効率の点ではAlertBox他よりは圧倒的によさそうです。

というわけで、まず安直に考えたのは、wgetをウェブスパイダーとして使い、動物園のサイトを毎日まるごとダウンロードし、diffをかけるというやり方でした。

wgetはこういった用途向けの便利な機能を持っています。

wgetが超絶便利なwebクローラー、クローリングツールだとは知らなかった・・・!

あたりが参考になるでしょうか。

で、まず最初の動物園のサイトに対して、wgetを実行してみました。

そうしたら時間のかかることかかること。

10年以上も前からWEBサイトを運営している動物園はざらです。そうなると一つのサイトのページ数が何百にもなっていたりするのです。

これをひたすらクローリングするわけですから、1分や2分では終わりません。200サイト全部やったら一日以上かかってしまうかもしれません。しかも、これは相手にとっても迷惑ですよね。

これを毎日とか毎週とか、定期的に実行しないといけないわけです。ネットワーク帯域の無駄遣いで、あまり格好のいいソリューションとはいえません。

スタートに手間はかかりますが、手動でチェック対象のページを絞り込んだほうがいいという結論にすぐに達しました。

それともう一つやっかいなのは、最近はCMSを利用している動物園・水族館が多数あるということです。

余談ですが、びっくりするほど有名な園でもサイトはホームページビルダーで作られていたりします。

で、話を戻すと、CMSを使っていると、例えばメニューを一か所変更すると、全ページに変更が反映されます。

diffにかけると、同じような結果が全ページ分出力されてしまうわけです。

AlertBox並とは言わないまでも、チェックする部分を限定する工夫が必要になります。

そのあたりも、何かのライブラリで解決できるに違いないということで、wget&diffを軸にツールを考えていくことにしました。

0 件のコメント:

コメントを投稿