使用ruby的open-uri访问特定站点时出现503错误

时间:2011-12-25 05:22:27

标签: ruby http web-crawler open-uri http-status-code-503

我一直在使用下面的代码抓取一个网站,但我想我可能已经爬得太多,并且完全被禁止访问该网站。在,我仍然可以在我的浏览器上访问该站点,但任何涉及open-uri和此站点的代码都会引发503站点不可用错误。我认为这是特定于网站的,因为open-uri仍然适用于google和facebook。有解决方法吗?

require 'rubygems'
require 'hpricot'
require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open("http://www.quora.com/What-is-the-best-way-to-get-ove$

topic = doc.at('span a.topic_name span').content
puts topic

1 个答案:

答案 0 :(得分:5)

有一些解决方法,但最好的想法是根据他们的条件成为一个好公民。 您可能需要确认您是否关注了Terms of Service

  

如果您操作搜索引擎或机器人,或者您重新发布所有Quora内容的很大一部分(我们可以根据我们的合理判断确定),您还必须遵循以下规则:

  • 您必须使用描述性用户代理标头。
  • 您必须始终关注robots.txt。
  • 您必须明确说明如何在您的用户代理字符串中或在您的网站上与您联系。

您可以使用OpenURI轻松设置用户代理标头:

Additional header fields can be specified by an optional hash argument.

  open("http://www.ruby-lang.org/en/",
    "User-Agent" => "Ruby/#{RUBY_VERSION}",
    "From" => "foo@bar.invalid",
    "Referer" => "http://www.ruby-lang.org/") {|f|
    # ...
  }

可以从http://www.quora.com/robots.txt检索Robots.txt。你需要解析它并尊重它的设置,否则它们会再次禁止你。

此外,您可能希望通过在循环之间休眠来限制代码的速度。

此外,如果您要为自己的网站搜索内容,可能需要在本地查看缓存页面,或使用其中一个spidering软件包。写蜘蛛很容易。编写一个可以很好地与网站一起使用的工作要做得更多,但要比完全不能自己的网站更好。

相关问题