Ruby on rails 机械化错误“错误响应太多”

Ruby on rails 机械化错误“错误响应太多”,ruby-on-rails,ruby,web-scraping,web-crawler,mechanize,Ruby On Rails,Ruby,Web Scraping,Web Crawler,Mechanize,在进行抓取时,我发现一些URL失败。检查url后,在浏览器中看起来正常,在wireshark中看到远程服务器以200回答,我最终发现url: 他失败了 Net::HTTP::Persistent::Error: too many bad responses after 0 requests on 42319240, last used 1414078471.6468294 seconds ago 更奇怪的是,如果你从最后一部分删除一个角色,它就可以工作了。如果在另一个位置添加角色,它将再次失败

在进行抓取时,我发现一些URL失败。检查url后,在浏览器中看起来正常,在wireshark中看到远程服务器以200回答,我最终发现url:

他失败了

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

这是一个网络错误,如果您从同一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")
但这并不能保证连接会成功,它只是增加了机会


很难说为什么在一个url上出现错误而在另一个url上没有。当您删除3个页面时,您会请求一个不同的页面;一个服务器可能更容易处理的问题?我的观点是:您的Mechanize设置没有问题,但是您得到的响应是正确的。

同意Severin的观点,问题出在另一边。由于我无法在服务器上执行任何操作,所以我尝试使用不同的lib来获取数据。奇怪的是,他们中的一些人工作,而另一些人不工作。尝试不同的mechanize设置,最后我找到了一个很好的设置:

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

这是一种网络错误,如果您从同一IP向某个源发出过多请求,通常会发生这种错误。不要使用wireshark,使用fiddler或charles。@pguardario wireshark有什么问题?它只是调试http请求的错误工具。你很快就会变傻的。这是个好主意。我比其他工具更习惯wireshark。谢天谢地,事实上是同一个问题。我尝试使用不同的URL,效果很好。删除“3”是可行的。我可以同时运行两个请求几次,但始终会使带有“3”的请求失败。我想强调错误的这一部分,我真的不明白:在0个请求之后有太多错误响应该请求失败得非常快,即使我设置了一个大的超时。因此,错误应该有所不同。正如我所说:您的Mechanize设置没有问题,也无法知道他们的服务器为什么会对您的请求做出这样的行为。