jqueryみたいに、htmlを操作できるJavaのライブラリ「jsoup」の使い方。
このエントリーは、タイトル通り、JavaのHTMLパーサーの「jsoup」の使い方。
感想
これから、使用していこうと思う。
- jQuery-likeということで、使い方がわかりやすい。
- 公式サイトの説明がわかりやすい気がする・・・。
- 何やら、現在(最新版は3ヶ月前)も開発やらサポートをしてるみたい。トップページをみたら、「バグがあったら、報告してくれよな!」って書いてる。
※他のJavaのhtmlパーサーについては、HTML Parser、Jericho HTML Parser、Java Mozilla Html Parserとかあるけど、どれも開発がとまっているみたいだ。(安定版だから?)
公式のindexページ
ダウンロード
インストール
jsoup-1.4.1.jarをクラスパスに通す。
ソースを見たければ、クラスパスに通したjarに、以下のjarを添付する。
jsoup-1.4.1-sources.jar
Javadoc
公式サイトのサンプルを見て、以下の2種類のコードを書きました。
- javascriptっぽく操作したコード。(getElementByIdとか使った)
- セレクタ構文なるもののコード(初めて知った。こちらの方が①よりも正確に取れるみたい)
解析対象のページ
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Jsoup サンプル html</title> <meta name="keywords" content="" /> <meta name="description" content="" /> </head> <body> <div id="menuLink"> <ul> <li class="class1"><a href="http://it-tech-dm.appspot.com/jsoup/Jsoup4">戻る</a></li> <li class="class2"><a href="http://www.google.co.jp/">Google</a></li> <li class="class2"><a href="http://yahoo.co.jp">Yahoo</a></li> <li class="class3"><a href="http://jp.msn.com/">MSN</a></li> <li class="class3"><a href="http://www.atmarkit.co.jp/">@IT atmarkIT</a></li> <li class="class3"><a href="http://www.taylorswift.com/">テイラースウィフト</a></li> <li class="gaga"><a href="http://www.ladygaga.com/default.aspx">au IS03の人</a></li> </ul> </div> <ul> <li><a href="http://www.ikimonogakari.com/"><span style="color:red;">いきものがかり</span></a></li> <li><a href="http://www.2ch.net/">2ちゃんねる</a></li> </ul> </body> </html>
- javascriptっぽく操作したコード。(getElementByIdとか使った)
結果:http://it-tech-dm.appspot.com/jsoup/jsoup4
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html; charset=UTF-8"); PrintWriter out = res.getWriter(); String url = "http://it-tech-dm.appspot.com/jsoup/sample.html"; try { Document doc = Jsoup.connect(url).get(); //aタグをすべて取得 Elements aTags = doc.getElementsByTag("a"); JsoupUtil.setMenu(res); for (Element aTag:aTags) { //aタグのテキスト out.println("aTag.text():" + aTag.text()); out.println("<br />"); //aタグのテキストに、任意の文字を加える out.println("aTag.appendText():" + aTag.appendText(":有名なサイトだよね!")); out.println("<br />"); //aタグのhtmlを取得 out.println("aTag.html():" + aTag.html()); out.println("<br />"); //aタグのhref属性を取得 out.println(" aTag.attr(\"href\"):" + aTag.attr("href")); out.println("<hr />"); } }catch (IOException e) { e.printStackTrace(); } }
2.セレクタ構文なるもののコード
結果:http://it-tech-dm.appspot.com/jsoup/jsoup5
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html; charset=UTF-8"); PrintWriter out = res.getWriter(); String url = "http://it-tech-dm.appspot.com/jsoup/sample.html"; try { Document doc = Jsoup.connect(url).get(); //div id 「menuLink」のulタグのliタグを取得 Elements liTags = doc.select("div#menuLink ul li"); JsoupUtil.setMenu(res); for (Element liTag:liTags) { out.println(liTag.text()); out.println("<br />"); } }catch (IOException e) { e.printStackTrace(); } }