Techboosterでは、これまでXMLをパース(解析)するやJSONをパース(解析)するで、Web上のコンテンツをパース(解析)する方法を紹介してきました。
今回は、JavaのHTMLパーサであるjsoupを用いてHTMLをパースする方法を紹介します。
jsoupは、HTTPのリクエストを投げるだけでDOMオブジェクトとしてHTMLを返してくれる便利なライブラリです。
jsoupのダウンロード
Jsoupの公式HPはこちら
ダウンロードはこちら
ダウンロードのページからjarファイルをダウンロードします。
※2012年2月23日現在では、バージョンは1.6.1でした。
jarファイルをダウンロードしたら、プロジェクトにクラスパスを通します。
クラスパスを通すには、プロジェクトの「プロパティ」から「Javaのビルド・パス」を選択し、「ライブラリー」タブから「外部Jar追加」からjarファイルを選択します。
Javadocはこちら
データ取得
まずはデータの取得を行います。
データの取得には以下のように、HTTPへリクエストを飛ばし、Documentを取得します。
■src/JSONSampleActivity.java
String url = "https://techbooster.org/";
try {
Document document = Jsoup.connect(url).get();
} catch (IOException e) {
e.printStackTrace();
}
4行目で、HTMLを取得したいURLにリクエストを飛ばし、Documentを取得しています。
ここで取得したDocumentデータから、欲しいデータを抽出します。
欲しいデータを抽出するには、以下の方法等があります。
[table “209” not found /]
欲しいデータによって、取得方法を変えるといいでしょう。
DocumentクラスのgetElementsByTag()で取得したElementの内容と、Documentクラスのtitle()で取得したStringの内容は、同様のものです。
イカの2つは同様の内容が取得されます。
String title = document.getElementsByTag("title").text();
//こちらでもtitleを取得できる
String title = document.title();
サンプルプログラム
今回は、取得したデータをTextViewに出力するサンプルを作成しました。
まず、レイアウト画面のXMLです。
■res/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
</LinearLayout>
画面にTextViewを置いただけの単純なものです。
次に、データ取得部分です。
■src/JSONSampleActivity.java
public class JSOUPSampleActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String url = "https://techbooster.org/";
try {
// HTMLのドキュメントを取得
Document document = Jsoup.connect(url).get();
// titleタグを取得
Elements title = document.getElementsByTag("title");
// こちらでもtitleを取得できる
// String title = document.title();
// bodyタグをIDから取得
Elements body = document.getElementsByTag("body");
// こちらでもbodyを取得できる
//Element body = document.body();
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(title.toString() + "\n" + body.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
12行目で指定のURLにリクエストを飛ばし、Documentを取得しています。
今回は、TechboosterのトップページのHTMLを取得しました。
15行目で、titleタグのタグ名を指定して取得しています。
20行目で、bodyタグのIDを指定して取得しています。
22行目のように、bodyタグもtitleタグ同様、Documentクラスのbodyメソッドで取得することができます。