ログインが必要なページからjsoupでスクレイピングする方法【Java】
Javajsoupを使ってログインが必要なページからスクレイピングするには、ログインページにログインを実行して返されたレスポンスにふくまれるクッキーを使う方法があります。
サンプルソースコード
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]”」みたいなやつですね。
広告