簡體   English   中英

Ruby open-uri,打開png URL時返回錯誤

[英]Ruby open-uri, returns error when opening a png URL

我正在通過http://manga.bleachexile.com/gantz-chapter-1.html及之后的Gantz漫畫制作爬蟲解析圖像。

在抓取程序嘗試打開圖像之前(第273章),我一直獲得成功:

錯誤的URI(不是URI?): http : //static.bleachexile.com/manga/gantz/273/Gantz[ 0273]_p001[Whatever-Illuminati] .png

但是我猜這個URL是有效的,因為我可以從Firefox打開。

部分代碼:

img_link = nav.page.image_urls.find {|x| x.include?("manga/gantz")}
img_name = RAILS_ROOT+"/public/#{nome}/#{cap}/"+nome+((template).sub('::cap::', cap.to_s).sub('::pag::', i.to_s))
img = File.new( img_name, 'w' )
img.write( open(img_link) {|f| f.read} )
img.close

這不是有效的uri。 uri只能使用某些字符。 順便說一句,像所有瀏覽器一樣,Firefox嘗試為用戶做盡可能多的事情,而不是在看上去不符合標准時抱怨。

它以以下形式有效:

open("http://static.bleachexile.com/manga/gantz/273/Gantz%5B0273%5D_p001%5BWhatever-Illuminati%5D.png") # => #<File:/tmp/open-uri20100226-3342-clj08a-0>

您可以嘗試像這樣逃避它:

uri.gsub(/\/.*/) do |t|
  t.gsub(/[^.\/a-zA-Z0-9\-_ ]/) do |c|
    "%#{ c[0]<16 ? "0" : "" }#{ c[0].to_s(16).upcase }"
  end.gsub(" ", "+")
end

但是請小心,如果網站使用正確的轉義的uri,而您又再次轉義了。 uri不會再指向同一位置了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM