Javaでログインが必要なサイトをスクレイピングする方法【実践編】

はじめに

ログイン認証が必要な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>

手順の概要

  1. ログインフォームの構造を確認
  2. Javaでログイン用POSTリクエストを送信
  3. Cookie付きでログイン後ページへアクセス
  4. 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管理の知識が欠かせません。HttpClientJsoupを組み合わせれば、Javaだけでかなり高機能な自動化が可能です。

ただし、対象サイトの利用規約やrobots.txtには必ず従いましょう。

タイトルとURLをコピーしました