LoginSignup
5

More than 5 years have passed since last update.

Jsoupを使ってみる

Last updated at Posted at 2014-10-22
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の記事を参考にしました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5