我无法抓取我希望抓取的确定网站。问题是:成功登录该网站后,我无法访问需要有效登录的链接。
例如:
public Document executeLogin(String user, String password) {
try {
Connection.Response loginForm = Jsoup.connect(url)
.method(Connection.Method.GET)
.execute();
Document mainPage = Jsoup.connect(login-validation-url)
.data("user", user)
.data("senha", password)
.cookies(loginForm.cookies())
.post();
Document evaluationPage = Jsoup.connect(login-required-url)
.get();
return evaluationPage;
} catch (IOException ioe) {
return null;
}
我在这里做的是:
我知道我必须存储cookie才能使会话保持活动状态,但是当我连接到登录验证网址时,它会返回一个Document对象,并且没有cookie可以从该对象获取。
有没有办法获得"会话"由成功登录创建并在其他Jsoup.connects中发送?我想要做的是抓取一个只能由登录用户访问的页面。
非常感谢你。
答案 0 :(得分:4)
登录后获取cookie:
Connection.Response loginForm = Jsoup.connect(url)
.method(Connection.Method.GET)
.execute();
Connection.Response mainPage = Jsoup.connect(login-validation-url)
.data("user", user)
.data("senha", password)
.cookies(loginForm.cookies())
.execute();
Map<String, String> cookies = mainPage.cookies();
Document evaluationPage = Jsoup.connect(login-required-url)
.cookies(cookies)
.execute.parse();
return evaluationPage;
当您获得第二个网页时,您还必须使用cookie:
(来源:几天前我遇到了这个问题)
因此,将Cookie放在Map
:
Map<String, String> cookies = loginForm.cookies();
使用这些Cookie提交表单。