Yir*_* Lu 1 ruby open-uri http web-crawler 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
Run Code Online (Sandbox Code Playgroud)
有解决方法,但最好的想法是根据他们的条件成为一个好公民.您可能需要确认您是否遵守其服务条款:
如果您操作搜索引擎或机器人,或者您重新发布所有Quora内容的很大一部分(我们可以根据我们的合理判断确定),您还必须遵循以下规则:
您可以使用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|
# ...
}
Run Code Online (Sandbox Code Playgroud)
可以从中检索Robots.txt http://www.quora.com/robots.txt.你需要解析它并尊重它的设置,否则它们会再次禁止你.
此外,您可能希望通过在循环之间休眠来限制代码的速度.
此外,如果您要为其内容搜索其网站,您可能希望在本地查看缓存页面,或使用其中一个spidering包.写蜘蛛很容易.写一个与网站很好地合作的工作要做得更多,但要比不能自己蜘蛛网站更好.