jsoup

Jsoupを使ってみる

More than 3 years have passed since last update.
String html = "<ul><li><a href='http://example.jp/' target='_blank'>other site</a></li><li><a href='./prev.html' class='inner'>prev page</a></li></ul>";
Document doc = Jsoup.parse(html);
Elements elm1 = doc.select("a[href]").select(".inner");
Elements elm2 = doc.select("a[href]").select("a[target=_blank]");
for (Element e : elm1) {
    // text  e.text()
    // hrefの値  e.attr('href')
    // hrefを絶対パスに変換  e.attr('abs:href')
}

最後の絶対パスがうまく取れない…
baseUriを設定しないといけないらしい

Document doc = Jsoup.parse(html, "http://example.com/hoge/");

あれ?ダメ?そう書いてあるのにな。

Document doc = Jsoup.parse(html);
doc.baseUri("http://example.com/hoge/");

やっと予想通りの出力に!

データとしてのhtmlはajaxで取ってきたりするだろうからこんな感じ。

Document doc = Jsoup.connect("http://example.com/hoge/data.html").get();
Elements elm = doc.select("a[href]");
for (Element e : elm) {
    //
}

本当にこれだけでいいの?って自分でも不安です。baseUriもきちんと設定されます。
ああ、HTTPUrlConnectionではTimeoutなし(永久に待つ)だったので調べてみましたが、jsoupでは既定値が3000msでした。さすが。
エラー処理も実装されているようなので大丈夫そう。

ステータスくらいは見てあげても良さそうだけど、そこはあまり気にせず「データが取れなかったら」くらいを想定しておけば十分そう。

本家サンプルQiitaの記事を参考にしました。