【问题标题】:Jsoup Read Time Out depending on UserAgent StringJsoup 读取超时取决于 UserAgent 字符串
【发布时间】:2014-08-30 19:35:27
【问题描述】:

我正在尝试使用 Jsoup 处理几个 url。一个这样的例子是:

http://www.aceshowbiz.com/movie/

当我这样做时:

Document doc = Jsoup.connect(url).get();

它抛出

Exception in thread "main" java.net.SocketTimeoutException: Read timed out

但是当我设置一个用户代理字符串时,它工作正常

Document doc = Jsoup.connect(url).userAgent("Chrome").get();

虽然它不适用于其他 UserAgent 字符串:

Document doc = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6").get();
//again a Read Time Out

我在这里的查询是:当网站允许某个用户代理字符串并且某些网站仅在根本不使用用户代理字符串时下载时,这种情况经常发生在我身上。我不确定是什么导致了这种行为。什么是解决这个问题。正如我所说,在某些网站上,我只能在完全不使用用户代理字符串的情况下下载。是服务器端的某种限制吗?或者如果一个网站没有用我的爬虫的用户代理字符串下载,我应该尊重它,不应该尝试更多的案例,或者它是某种错误。当然不确定为什么网站不允许某些用户代理字符串/根本不使用用户代理字符串时很少下载。

我也在http://www.bloombergview.com/topics/entertainment 上测试了几个用户代理字符串,发现它只在少数几个上被下载。我们如何确定它的工作原理?

如果是 Jsoup 的问题,我应该尝试使用 http 手动下载页面并提供 Jsoup.parse(html) 吗?不确定那里也会遇到同样的问题。

编辑:我希望我能够传达问题:-> 如何为能够下载所有站点的爬虫选择正确的用户代理字符串。我肯定会将我的爬虫名称添加到 useragent 字符串中(如果此信息很重要),但我现在遇到了上面可用的通用字符串的问题。不确定上述情况会发生什么。

【问题讨论】:

  • 我尝试使用您发布的用户代理,它可以工作。
  • 感谢您的评论。 aceshowbiz 似乎不能与“chrome”以外的任何东西一起使用,而bloomberg 与上面发布的长用户代理字符串一起使用。需要了解正在发生的事情以及为什么站点使用很少的用户代理字符串而很少使用不起作用。和解决方法。
  • 你航行I tested few useragent strings on http://www.bloombergview.com/topics/entertainment as well and found it gets download **only** when using **no useragent** string.
  • 如果不是这样,请更新您的问题。
  • 关于这个I tested few useragent strings on http://www.bloombergview.com/topics/entertainment as well and found it gets downloaded only on few. How can we decide on which it works ?请发布有问题的用户代理之一。

标签: java jsoup web-crawler user-agent


【解决方案1】:

关于aceshowbiz,问题不在于userAgent,而在于超时选项。 试试这个

Document doc = Jsoup.connect("http://www.aceshowbiz.com/movie/")
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                  //.userAgent("Chrome")
                    .timeout(0)  
                    .get();

我希望看到一个 userAgent 工作而另一个不工作的例子。 你有吗?

timeout(0) 这将删除超时限制。您可以添加一些大数字,这在性能方面仍然可以接受

【讨论】:

  • 谢谢。它在使用引荐来源网址时起作用。不确定在爬虫中使用引荐来源网址是否道德/合法/有效,但无论如何都会使用它。问题来自 aceshowbiz,当我为其调整 useragent 字符串时,其他网站无法正常工作。我正在再次分析我的所有数据库以查看是否存在任何此类错误。
  • 我已经检查了更多。问题不在于引荐来源标头,而在于 jsoup 具有的默认超时选项。请查看我的更新,它应该在没有推荐人的情况下工作。出于某种原因,当使用引荐来源网址时,它的工作速度会更快一些,因此您不会超过该超时限制。检查更新的代码。
  • 即使没有 userAgent 标头也可以工作。它只是慢了很多。
  • 这有点奇怪,但是当添加 .userAgent("Opera") 作为选项并且 .timeout(0) 和其他值对我没有帮助时,我也解决了这个问题。
猜你喜欢
  • 2011-09-28
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 2019-08-04
  • 2016-08-08
  • 1970-01-01
相关资源
最近更新 更多