サイトのhtmlをXmlSlurperで処理する

最近ではxhtmlでかかれたサイトが多くなったが、サイトのhtmlがxhtmlであることを前提にXmlSlurperで処理しようとすると時々固まってしまう。正しいxhtmlでかかれていない箇所があったりするからだ。 また、DTD定義を探しにいくが、見つからずにエラー、といったこともある。

そこで xhtmlを読み込む前に事前処理を行うことで、サイトのxhtmlを XmlSlurper で処理できる。

ソースコード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#!/usr/bin/env groovy
@Grapes(
@Grab(group='net.sourceforge.htmlcleaner', module='htmlcleaner', version='2.2')
)
import org.htmlcleaner.*
def address = 'http://groovy.codehaus.org/'
def cleaner = new HtmlCleaner()
def node = cleaner.clean(address.toURL())
// htmlをxmlに変換
def props = cleaner.getProperties()
def serializer = new SimpleXmlSerializer(props)
def xml = serializer.getXmlAsString(node)
// DTDの妥当性検証を実施しない設定
def page = new XmlSlurper(false,false).parseText(xml)

// (以下省略)
// ...

ひとこと

ここから先は以下のサイトを参考に page 変数に対して好き勝手にごにょごにょしてあげればOK。(僕はXmlSlurperの使い方になれず)

参考