ログインが必要なページから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]”」みたいなやつですね。

コメント

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