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でした。さすが。
エラー処理も実装されているようなので大丈夫そう。
ステータスくらいは見てあげても良さそうだけど、そこはあまり気にせず「データが取れなかったら」くらいを想定しておけば十分そう。