【问题标题】:Mechanize::ResponseCodeError (404 => Net::HTTPNotFound unhandled response):Mechanize::ResponseCodeError (404 => Net::HTTPNotFound 未处理的响应):
【发布时间】:2022-01-02 13:44:08
【问题描述】:

尝试使用 mechanize gem 从https://en.wikipedia.org/ 网站抓取图像。当我尝试计算图像大小时,我得到了Mechanize::ResponseCodeError (404 => Net::HTTPNotFound for https://upload.wikimedia.org/wikipedia/commons/thumb/f/f5/FP2A3620_%252823497688248%2529.jpg/119px-FP2A3620_%252823497688248%2529.jpg -- unhandled response):

这是我的代码

         def images
          agent = Mechanize.new
          page = agent.get("https://en.wikipedia.org/")
          page.images.each do |image|
            puts image.url
            size = agent.head( image )["content-length"].to_i/1000
          end  
       end

感谢任何帮助。

【问题讨论】:

  • 我无法通过浏览器访问该网址,您确定它有效吗?
  • 是的 https://en.wikipedia.org/ 这是一个有效的 URL
  • 我说的是您提供的https://upload.wikimedia.org/wikipedia/commons/thumb/f/f5/FP2A3620_%252823497688248%2529.jpg/119px-FP2A3620_%252823497688248%2529.jpg,该页面的状态码是404,这就是您无法解析它的原因。用浏览器打开网址。
  • @zhisme 是的,但我们必须在抓取时修复这类 url 错误。

标签: ruby web-scraping mechanize


【解决方案1】:

照看维基百科上的那张图片,它渲染得很好。在新选项卡中打开它,并将浏览器中的 url 与 mechanize 的 url 进行比较。

取消转义网址,成功了。

image_url = CGI.unescape(image.url.to_s)
size = agent.head(image_url)["content-length"].to_i/1000

这是一个有效的Replit

【讨论】:

  • 太好了,谢谢你.. 它有效@razvans。我只是处理了同样的异常来解决这个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 2018-06-08
相关资源
最近更新 更多