前回jsoupを使い、指定したURLのHTMLドキュメントを取得する方法を見た。今回は個別要素を具体的に取得する方法を見ていこう。

取得したDocumentインスタンスから、getElementsByTagメソッドを使えば、指定したタグ名から要素を取得できる。以下のコードの場合、引数に”h4″を渡す事で、<h4>タグで囲まれた要素が全てArrayListを継承したElementsインスタンスで取得される。個別要素はElementインスタンスとなっている。

一つ目の要素は以下のような構造になっている。テキストを取得したい場合は上記のようにtext()メソッドを使えば”国内”を取得できる。

取得したElementインスタンスから同様の要素取得メソッドを使う事ができ、例えば以下のように指定すれば、入れ子の中身も取得できる。クラス名の場合はgetElementsByClassメソッドだ。なお、ここではリストの一つ目なのでget(0)で取得しているが、jsoupにはfirst()というメソッドも存在する。

aElementsは<a>タグの内部が取得されている。(この場合は要素が1つのElementsである。)属性を取得したい場合は個別要素に対してattrメソッドを使えば良い。上記の場合、「国内」カテゴリーの記事のRSSフィードである”https://headlines.yahoo.co.jp/rss/all-dom.xml”が取得される。

他にも、以下のようなメソッドをはじめとして、多くのメソッドがある。

  • getElementsContainingText(String searchText)
    引数文字列が含まれる要素を取得
  • getElementById(String id)
    HTMLのid指定で要素を取得
  • getElementsByAttribute(String key)
    指定した属性が含まれる要素を取得

一連のメソッドは直感的に指定でき、idやclass指定など便利なメソッドも多い。しかし、HTMLの構造が複雑な場合は多数のメソッドを呼び出さなければならないので煩雑なケースがある。CSSセレクターが分かれば、より簡潔な表記で要素を取得できるので、次回はそれについて紹介しよう。