JSoup需要很长时间才能加载&有时无法获取正确的数据

时间:2014-06-13 11:15:07

标签: java jsoup

使用JSoup从网上抓取数据时,我遇到两个问题:

  1. 它的表现并不好:连接到网址需要一点时间。

  2. 对于某些网站,它没有从网址中获取正确的数据。例如,尝试使用纽约时报的任何网址,例如 - http://www.nytimes.com/2014/06/13/technology/facebook-to-let-users-alter-their-ad-profiles.html?ref=technology

  3. 它只是加载登录页面,但是当我在Google或Facebook上尝试相同的URL时,他们正确地获取数据。此外,URL在访客用户的浏览器中加载正常。

1 个答案:

答案 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与我的请求一起发送。