情報集約
Webページからの情報抽出
スケジューリングや法律上の問題を解決して、ようやくWebページをキャッシュしたとしても、
次はHTMLなど余分なマークアップを含むテキストから必要情報を抽出するという問題があります。
少なくとも継続的なクローリングのためには、ページ内のリンクをたどる必要がありますが、
そうした問題を解決するためには、1) HTMLパーサを用いる、2) 正規表現を用いる、などが一般的なようです
(参考:Hemenway K., Calishain T., 村上雅章 訳:"Spidering Hacks",オライリー・ジャパン,(2004))。
PHP言語では、HTMLパーサはPEARライブラリのXML_HTMLSax、
URLの解決にはNet_URL2が適しているようです。
弊社では、PHPによる当該クラスライブラリを用いた実装のほか、Java言語とHTMLParserを用いた実装の研究開発を行っており、
その成果の一部は「HTMLパーサ・HTML文書からのデータ抽出」でご紹介しています。
一方、日本語のWebサイトを扱う際には、常に文字コードの問題に悩まされます。
セオリーに従った文字コード判定は、Content-typeヘッダか<meta>タグが指定する文字コードをチェックする、ということになりますが、
Webサーバー管理者らの設定ミスはよくあることです。
また、日本語本文の解釈には形態素解析など言語処理技術に基づく手法がありますが、
一般の開発者には敷居が高く感じられます。
その場合には、HTMLタグが残ったままのWebページを正規表現等で解析する、
前掲書Spidering Hacksで紹介されているような手法がお手軽で良い模様です。
その他の参考情報
Wikipedia:Web crawlerは、 従来理論と主要な参考文献をチェックする上で有益でした。 実際のクローラの実装は、JSpider(Java)、 PHPCrawl(PHP)など、多数あるようです。 意外なところでは、My RSS 管理人ブログ:"RSSリーダーのクローラーが提供すべき User-Agent の値",(2006)が興味深いと思われました。 重箱の隅ではありますが、Webサイト管理者とクローラ管理者のコミュニケーションがUser-agentくらいしかない現状を考えると、 重要な指摘だと考えられます。
- Webクローラとは何か
- クロール周期の決定問題
- クローラが招く問題
- Webページからの情報抽出
【関連ページ】