ログインが必要なページからjsoupでスクレイピングする方法【Java】

Java

jsoupを使ってログインが必要なページからスクレイピングするには、ログインページにログインを実行して返されたレスポンスにふくまれるクッキーを使う方法があります。

サンプルソースコード

public class Jsoup {

  public static void main(String[] args) {
    Document document;

    // ユーザ名・パスワード
    final String USERNAME = "ユーザ名";
    final String PASS = "パスワード";

    // ログインページのURL
    final String LOGIN_URL = "ログインURL";
    String mainUrl = "ログインした状態でアクセスしたいURL"

    // ユーザーエージェント
    final String UA = "ユーザーエージェント";


    try {
          // ログインページからレスポンスを取得
      Connection.Response response = Jsoup.connect(LOGIN_URL)
              .method(Connection.Method.GET)
              .execute();
      response = Jsoup.connect(LOGIN_URL)
              .data("フォームのname(user名)", USERNAME, "フォームのname(パスワード)", PASS)
              .userAgent(UA)
              .cookies(response.cookies())
              .method(Connection.Method.POST)
              .execute();

      // ログインページから取得したクッキーを使ってアクセス
      document = Jsoup.connect(mainUrl)
          .userAgent(UA)
              .cookies(response.cookies())
              .get();

    } catch (IOException e) {
      e.printStackTrace();
    }


}

定数を使っていますが特に意味はありません。変数でも大丈夫です。

まずresponseにログインページからのレスポンスを代入し、実際にスクレイピングをおこないたいURLに対してcookiesメソッドの引数としてresponse.cookiesメソッドで渡してやることで、ログイン状態を維持してdocumentを取得できます。

また、フォームのnameというのはname属性の値のことです。

「name=”login[user]”」みたいなやつですね。

広告

関連記事

新着記事

広告