机械化错误"太多不良反应"

时间:2014-10-23 15:41:30

标签: ruby-on-rails ruby web-scraping web-crawler mechanize

刮痧我发现有些网址失败了。检查后,网址在浏览器中看起来没问题,并且在wireshark中看到远程服务器正在回答200我终于找到了网址:

http://www.segundamano.es/electronica-barcelona-particulares/galaxy-note-3-mas.htm

失败了

Net::HTTP::Persistent::Error: too many bad responses after 0 requests on 42319240, last used 1414078471.6468294 seconds ago

更奇怪的是,如果从最后一部分删除一个角色,它就可以了。如果您将角色添加到其他位置,则会再次失败。

更新1

"代码"

agent = Mechanize.new
page = agent.get("http://www.segundamano.es/electronica-barcelona-particulares/galaxy-note-3.htm")
  Net::HTTP::Persistent::Error: too many bad responses after 0 requests on 41150840, last used 1414079640.353221 seconds ago

2 个答案:

答案 0 :(得分:0)

这是一个网络错误,如果您对来自同一IP的某个来源发出太多请求,通常会发生网络错误,因此页面加载时间过长。您可以尝试向连接代理添加自定义超时,保持连接活动并忽略错误的分块(可能不好):

agent = Mechanize.new
agent.keep_alive = true
agent.ignore_bad_chunking = true
agent.open_timeout = 25
agent.read_timeout = 25
page = agent.get("http://www.segundamano.es/electronica-barcelona-particulares/galaxy-note-3.htm")

但这并不能保证连接成功,只会增加连接机会。

很难说为什么你会在一个网址上而不是另一个网址上收到错误。当你删除3时,你要求一个不同的页面;一个可能更容易让服务器处理?我的观点是:您的Mechanize设置没有任何问题,但是您回复的响应。

答案 1 :(得分:0)

同意Severin,问题出在另一边。由于我无法在服务器中执行任何操作,因此我尝试使用不同的库来获取数据。有些人工作而其他人没有工作,这很奇怪。尝试不同的机械设置,最后我找到了一个好的设置:

  agent = Mechanize.new { |agent| 
    agent.gzip_enabled = false
  }