我正在尝试获取页面内图像的确切URL,然后下载它。我还没有到达下载点,因为我试图隔离图像的URL。这是代码:
#!/usr/bin/ruby -w
require 'rubygems'
require 'hpricot'
require 'open-uri'
raw = Hpricot(open("http://www.amazon.com/Weezer/dp/B000003TAW/"))
ele = raw.search("img[@src*=jpg]").first
img = ele.match("(\")(.*?)(\")").captures
puts img[1]
当我按原样运行时,我会收到:
undefined method `match' for #<Hpricot::Elem:0xb731948c> (NoMethodError)
如果我注释掉最后两行并添加
puts ele
我得到:
<img src="http://ecx.images-amazon.com/images/I/51rpVNqXmYL._SL500_AA240_.jpg" style="display:none;" />
这是我要解析的页面的正确部分。但是,错误是当我试图得到“http://ecx.images-amazon.com/images/I/51rpVNqXmYL._SL500_AA240_.jpg”style =“display:none;”一部分。
我不完全确定为什么它不能执行匹配,因为我理解我正在运行的搜索应该是获取图像元素的数组并返回第一个。所以我假设我无法在整个阵列上运行匹配,所以我尝试了
img = ele[1].match("(\")(.*?)(\")").captures
puts img
然后返回
undefined method `match' for nil:NilClass (NoMethodError)
我迷路了。请原谅我的无知,因为我刚开始学习红宝石。任何帮助表示赞赏。
答案 0 :(得分:1)
更改此行:
img = ele.match("(\")(.*?)(\")").captures
要:
img = ele[:src]
错误的原因是Hpricot:Elem
不是字符串。尝试:
ele.responde.to? :match
你得到假。
但是,你可以这样做:
ele.to_s.match("(\")(.*?)(\")").captures[1]
秘密在to_s