我在抓取我想要抓取的确定的网站时遇到困难。问题是:成功登录该网站后,我无法访问需要有效登录的链接。
例如:
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,以便我可以正常登录;
- 然后我发布到登录验证网址,登录后返回主页;
- 最后,我尝试在登录主页后访问登录所需的 url,但该请求返回登录页面,就好像会话已过期一样。
我知道我必须存储 cookie 才能保持会话处于活动状态,但是当我连接到登录验证 url 时,它会返回一个 Document 对象,并且没有可从该对象获取的 cookie。
有没有办法获取成功登录创建的“会话”并将其在其他 Jsoup.connects 中发送?我想做的是抓取一个只能由登录用户访问的页面。
预先非常感谢您。
登录后获取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:
(来源:我前几天遇到这个问题)
所以把饼干放在一个更容易Map
:
Map<String, String> cookies = loginForm.cookies();
并使用这些 cookie 提交表单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)