Javaでもできるスクレイピング

【!注意!】
スクレイピングは、サイトによって
使用可否(=利用規約)が異なるため
安易に実行するのはやめましょう

スクレイピングと言えばPythonみたいな
空気感ありますが、Javaでもできます。
「Jsoup」というライブラリがあるので
これを使います。

2020/09/19追記:
githubにサンプルコードをアップしました
https://github.com/engineer-yone3/WebScrapingSample

①:ライブラリのインポート

以下はGradle3.Xでやる場合です。
他のライブラリ管理(Jarのインポートやmavenなど)
は各自調べて下さい

dependencies {
   implementation('org.jsoup:jsoup:1.13.1')
}

②:サイトへの接続

JsoupのDocumentクラスで取得します。

Document document = Jsoup.connect("URL Here").get();

③:要素をselect

JsoupのElementクラスに取得する要素を渡します。
selectメソッドの引数(string部分)はセレクタを書きます。
jQuery等、他のライブラリでも使われている記法(ID、Name、クラス)
でのselectが可能です。

Elements elements = document.select("Selector Here");

④:htmlタグをパースして値を取得

やり方は何通りかあるんですが、
ここでは③でselectしたノードに対し、子ノードのみの場合
の取得方法を記載します。

Element elmValue = elements.get(0).child(0).selectFirst("Selector Here");
String _value = elmValue.text().trim();

③で取得したElementsのインスタンスはArrayListを継承したものです。
従ってget(index)で取得可能です。
その後、child(index)で子ノードを選択、その中のセレクタで要素を取得します。
(aタグとかdivタグとか、何でもいいです)
最後に、selectした要素のtext()を取得します。
これはselectした要素に子ノードがいない場合に有効です。
(子 > 孫 >・・・と階層が続いている場合は、うまく取得できません)

DOMを意識したコーディングをしないと
上手く値が取れないので、難易度はそこそこあると思います。

この記事が気に入ったらサポートをしてみませんか?