HTMLをスクレイピング(scraping)してあれこれとするとき、僕はずっと正規表現に頼っていたのですが、 ページの構造が変化するとすぐに使えなくなってしまうし、時間がかかる割りに退屈な作業なので何とかならないかなと思っていました。
PHPで探していたのですが、XML(とかRSS)をパースする関数やライブラリは、良く目にするものの、HTMLを処理できるものはなかなか見つかりませんでした。以下は、PHP(とかRuby、Perl)でHTMLをスクレイピングしたりパースするための方法。(追記 2007/5/21)。
HTMLを、整形式のXMLに変換してくれるライブラリ。PEARのXML_HTMLSax3が同梱されているので、これだけでちゃんと動きます。いんちきなHTMLとか、XHTMLが整形式のXMLになるので、後は通常のXMLと同じように処理できる。
動作は、サンプルの「sample.php」ですぐに確認可。「$target = ~」で対象ファイルと、文字コードを指定し、「$output_xml = true;」でXMLファイルになる。とても便利!
rhaco.org(らこ。PHPのWebアプリケーションフレームワーク)のSimpleTagを使うとPHPでHTMLを簡単にparseできる。使い方もシンプルです。(参考:[rhaco]SimpleTag
rhacoは、本当にいろんなことができるっぽい。ただ、ドキュメントが見当たらない?みたいなのでなかなか内容が掴めない。 テンプレートtemplate(rhaco)エンジンとかも使える。
スヌーピーはウェブブラウザをシミュレートするPHPのクラス。リンク(aタグ)を抜き出したり、submitして、getしたりできる。 そういえば、前に使ったMagpie RSSも中でSnoopyを使っているみたい。
PHP以外の他の言語の方が、この手のスクレイピング、パース(parse)周りは豊富かもしれない。 僕は、PHP以外、ほとんど使えないのですが一応メモ。
「WWW::Mechanizeとか」、 「htree」、「Hpricot」とかいろいろある。 サーバーにはRubyもインストールされているようなので、初めてだけど、 VikiWiki - htreeを参考に、 "htree"あたりを使ってみたらちゃんと動いた。
こういうのをみると、Rubyもいいなって思う。
WWW::MechanizeはRubyとかに移植されているが、元は Perlで書かれていたものだったらしい。
他にも、PerlにはWeb::Scraperというモジュールがあるようです(追記 2007/5/21)。これは使いやすそうですね。

Spidering hacks―ウェブ情報ラクラク取得テクニック101選
Perl中心だけど、かなりおもしろい。Hack#84にPHPのサンプルコードも一応ある。紹介されているコードが日本のサイトに合わせてあったり(国立国会図書館、Yahoo!JAPANのサイトなど)、日本語処理にかんするパートもちゃんと載っている。ページ数500ぐらいでちょっと厚めかな。
更新2007/7/10 PHPその他のリンクに追加
|
|
1.
|
|
|
2.
|
|
|
3.
|
|
|
4.
|
|
|
5.
|
|
|
6.
|
|
|
7.
|
このエントリーのトラックバックURL: