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

2019-01-25Groovy

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

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

ソースコード

#!/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の使い方になれず)

参考

2019-01-25Groovy