Groovyでスクレイピングしてみる(NekoHTML編)
Groovyでスクレイピングしてみる - No Programming, No Life
の続き。
前回は取得したHTMLの内容を正規表現で解析していましたが、JavaのライブラリでNekoMTMLというのがあるらしく*1、それを使うと曖昧なHTMLをいい感じに解析してくれるようです。GroovyのXmlSlurperでラップするだけですぐに使用できるので簡単です。
準備
動作サンプルソース
前回と同様、はてなハイクの最新エントリページをスクレイピングしてみます。
(動作確認: Groovy Version: 1.6.2 JVM: 1.6.0_13)
// need "nekohtml.jar" and "xercesImpl.jar" /* * はてなハイクのトップページ(http://h.hatena.ne.jp/)にアクセスし * 最新のエントリを投稿したユーザIDを取得し、そのユーザのプロフィールの * URLを標準出力へ出力する。 */ import org.cyberneko.html.parsers.SAXParser def parser = new XmlSlurper(new SAXParser()) // ラッピング def HTML = parser.parse("http://h.hatena.ne.jp/") def userIDs = HTML.'**'.findAll{ it.name() == 'SPAN' && it.@class == 'username' // <SPAN class="username"> }.collect{ it.A.text() } // A要素の値 userIDs.each{ id -> println "http://www.hatena.ne.jp/${id}/" }
簡単ですね!応用次第でいろいろ出来そうですね。これは強力。
メモ
ドキュメントを詳しく読んでなんでよく分からないんですが、解析した結果、HTMLタグは大文字になるみたいです。*4