はじめに
ログイン認証が必要なWebサイトをスクレイピングするには、単純なHTML解析だけでは対応できません。セッション管理やCookie、POSTリクエストなど、HTTPの仕組みを理解した処理が必要です。
この記事では、Javaでログイン認証を通過し、ログイン後のページをスクレイピングする方法を実用コード付きで解説します。主に以下の技術を使います。
HttpClient
(Java標準)Jsoup
(HTML解析)- Cookie管理
使用ライブラリ
- Java 11 以上(
java.net.http.HttpClient
を使用) - Jsoup:HTML解析用
Maven依存:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.4</version>
</dependency>
手順の概要
- ログインフォームの構造を確認
- Javaでログイン用POSTリクエストを送信
- Cookie付きでログイン後ページへアクセス
- Jsoupでスクレイピング
ステップ①:ログインフォームを調査
ログインページのHTMLを開き、以下を確認
form
タグのaction
(送信先URL)- ユーザー名・パスワードの入力
name
- CSRFトークンなどの追加要素
例:
<form action="/login" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="hidden" name="csrf_token" value="..." />
</form>
ステップ②:ログインPOSTリクエストを送信
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.cookieHandler(new java.net.CookieManager())
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/login"))
.header("Content-Type", "application/x-www-form-urlencoded")
.POST(HttpRequest.BodyPublishers.ofString("username=myid&password=mypass"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("ログイン結果: " + response.statusCode());
多くのサイトではログイン後にリダイレクトが発生します。
followRedirects
を使って対応します。
ステップ③:Cookie付きで保護ページにアクセス
HttpRequest pageRequest = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/mypage"))
.GET()
.build();
HttpResponse<String> pageResponse = client.send(pageRequest, HttpResponse.BodyHandlers.ofString());
String html = pageResponse.body();
ステップ④:JsoupでHTML解析
Document doc = Jsoup.parse(html);
// 例:ログイン後に表示されるデータを取得
Elements items = doc.select(".item-list li");
for (Element item : items) {
System.out.println(item.text());
}
注意点と対策
課題 | 対応方法 |
---|---|
CSRFトークンが必要 | 最初にGETして値を取得 |
JavaScriptで認証処理 | SeleniumなどのUI操作が必要 |
reCAPTCHAなどの対策 | 自動ログイン不可の可能性大 |
ユーザーエージェントが必要 | User-Agent をヘッダー追加 |
まとめ
ログイン認証付きサイトのスクレイピングでは、HTTP通信とCookie管理の知識が欠かせません。HttpClient
とJsoup
を組み合わせれば、Javaだけでかなり高機能な自動化が可能です。
ただし、対象サイトの利用規約やrobots.txtには必ず従いましょう。