使用JSoup从网上抓取数据时,我遇到两个问题:
它的表现并不好:连接到网址需要一点时间。
对于某些网站,它没有从网址中获取正确的数据。例如,尝试使用纽约时报的任何网址,例如 - http://www.nytimes.com/2014/06/13/technology/facebook-to-let-users-alter-their-ad-profiles.html?ref=technology
它只是加载登录页面,但是当我在Google或Facebook上尝试相同的URL时,他们正确地获取数据。此外,URL在访客用户的浏览器中加载正常。
答案 0 :(得分:1)
这里发生的事情是纽约时报正在使用会话cookie来确定他们是否应该向您显示内容,或者将您重定向到登录页面。
由于JSoup正在删除cookie,您将始终检索登录页面,而不是将其发送回内容。
根据JSoup文档,您可以使用cookies()
方法检索响应中的Cookie。
然后,您可以使用Connection上的cookies(Map<String, String>)
方法在下一个请求中设置它们。
然后,您可以管理请求/响应链中的Cookie。
这不是JSoup问题,您可以在命令行上使用curl重现相同的事情:
curl -v http://www.nytimes.com/…
返回&#34;见其他&#34;请求与登录页面的位置
curl -v http://www.nytimes.com/glogin?URI=http%3A%2F%2Fwww.nytimes.com%2F…
丢弃一个cookie&amp;给出一个&#34; 302&#34;请求将您发回页面。
如果我再次请求该页面,我将开始执行该过程,除非我将其会话cookie与我的请求一起发送。