Ruby Mechanize 出现 HTTPNotFound 错误
Ruby HTTPNotFound Error with Mechanize
我在 rails 上有一个 ruby 应用程序正在尝试访问 Yahoo Sports 上的各种链接,有时当它尝试访问某个页面时,会出现以下错误。错误是一致的,它失败的任何链接,它总是失败。这不是有时他们工作有时他们不工作的情况。您会发现该页面确实存在并且加载正常,所以我不确定为什么它会给我一个错误。以前有没有人经历过这种行为,如果有,你对如何让它起作用有什么建议吗?
404 => Net::HTTPNotFound for http://sports.yahoo.com/mlb/players/9893/
-- unhandled response
@client = Mechanize.new()
@client.request_headers = { "Accept-Encoding" => "" }
@client.ignore_bad_chunking = true
#works
#url = 'http://sports.yahoo.com/mlb/players/7307'
#doesn't work
url = 'http://sports.yahoo.com/mlb/players/9893'
result = @client.get(url)
您需要处理重定向。 Mechanize 为此提供了一种方法- follow_meta_refresh。尝试将其添加到您的代码中。示例:
require 'mechanize'
@client = Mechanize.new()
@client.request_headers = { "Accept-Encoding" => "" }
@client.ignore_bad_chunking = true
@client.follow_meta_refresh = true
#works
#url = 'http://sports.yahoo.com/mlb/players/7307'
#doesn't work
url = 'http://sports.yahoo.com/mlb/players/9893'
result = @client.get(url)
pp result
底部的 pp 将以良好的格式打印出页面以供进一步抓取。在我的机器上看起来是正确的内容。
我无法通过 mechanize 解决这个问题,但我能够从 HTTParty 获得 URL。如果您从机械化故障中进行救援并通过查找重定向 URI 重试,您应该设置:
require 'mechanize'
require 'httparty'
@client = Mechanize.new()
url = 'http://sports.yahoo.com/mlb/players/9893'
begin
result = @client.get(url)
rescue Mechanize::ResponseCodeError => e
redirect_url = HTTParty.get(url).request.last_uri.to_s
result = @client.get(redirect_url)
end
我在 rails 上有一个 ruby 应用程序正在尝试访问 Yahoo Sports 上的各种链接,有时当它尝试访问某个页面时,会出现以下错误。错误是一致的,它失败的任何链接,它总是失败。这不是有时他们工作有时他们不工作的情况。您会发现该页面确实存在并且加载正常,所以我不确定为什么它会给我一个错误。以前有没有人经历过这种行为,如果有,你对如何让它起作用有什么建议吗?
404 => Net::HTTPNotFound for http://sports.yahoo.com/mlb/players/9893/ -- unhandled response
@client = Mechanize.new()
@client.request_headers = { "Accept-Encoding" => "" }
@client.ignore_bad_chunking = true
#works
#url = 'http://sports.yahoo.com/mlb/players/7307'
#doesn't work
url = 'http://sports.yahoo.com/mlb/players/9893'
result = @client.get(url)
您需要处理重定向。 Mechanize 为此提供了一种方法- follow_meta_refresh。尝试将其添加到您的代码中。示例:
require 'mechanize'
@client = Mechanize.new()
@client.request_headers = { "Accept-Encoding" => "" }
@client.ignore_bad_chunking = true
@client.follow_meta_refresh = true
#works
#url = 'http://sports.yahoo.com/mlb/players/7307'
#doesn't work
url = 'http://sports.yahoo.com/mlb/players/9893'
result = @client.get(url)
pp result
底部的 pp 将以良好的格式打印出页面以供进一步抓取。在我的机器上看起来是正确的内容。
我无法通过 mechanize 解决这个问题,但我能够从 HTTParty 获得 URL。如果您从机械化故障中进行救援并通过查找重定向 URI 重试,您应该设置:
require 'mechanize'
require 'httparty'
@client = Mechanize.new()
url = 'http://sports.yahoo.com/mlb/players/9893'
begin
result = @client.get(url)
rescue Mechanize::ResponseCodeError => e
redirect_url = HTTParty.get(url).request.last_uri.to_s
result = @client.get(redirect_url)
end