hpricot: получить изображение из URL и элемент разбора - PullRequest
0 голосов
/ 31 мая 2011

Я пытаюсь получить точный 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)

, если я закомментирую последние 2 строки и добавлю

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;"part.

Я не совсем уверен, почему он не может выполнить сопоставление, так как я понимаю, что поиск, который я выполняю, должен получить массив элементов изображения и вернуть первый.поэтому я предположил, что не могу запустить сопоставление для всего массива, поэтому я попытался

img = ele[1].match("(\")(.*?)(\")").captures
puts img

, и это возвращает

undefined method `match' for nil:NilClass (NoMethodError)

Я потерян.прошу прощения за мое невежество, так как я только начинаю изучать рубин.любая помощь приветствуется.

1 Ответ

1 голос
/ 31 мая 2011

Изменить эту строку:

img = ele.match("(\")(.*?)(\")").captures

Кому:

img = ele[:src]

Причина ошибок в том, что Hpricot:Elem не является строкой. Попробуйте:

ele.responde.to? :match

и вы получаете ложь.

Однако вы можете сделать:

ele.to_s.match("(\")(.*?)(\")").captures[1]

секрет в to_s

...