通过nokogiri和xpath解析图像



我目前有一段代码,它将抓取产品标题,描述和价格,并且它工作得很好。但是,我还需要它来获取图像URL,这是我的困境所在。我尝试在循环内使用xpath,我有在底部,它列出了所有的图像等于220上的每一个产品,我不想要的。所以我得到了这样的东西....

product 1标题在这里
product 1此处描述
产品1的价格在这里
http://www.test.com/product1.jpg
http://www.test.com/product2.jpg
http://www.test.com/product3.jpg
http://www.test.com/product4.jpg


product 2标题在这里
产品2说明在这里
产品2的价格在这里
http://www.test.com/product1.jpg
http://www.test.com/product2.jpg
http://www.test.com/product3.jpg
http://www.test.com/product4.jpg

我显然希望产品1有http://www.test.com/product1.jpg产品2有http://www.test.com/product2.jpg等等。图像只是在没有类或ID的div标签中,因此我没有简单地将它们放入css选择器中。我对ruby/nokogiri真的很陌生,所以任何帮助都会很棒。

require 'nokogiri'
require 'open-uri'

url = "http://thewebsitehere"
data = Nokogiri::HTML(open(url))
products = data.css('.item')

products.each do |product|
    puts product.at_css('.vproduct_list_title').text.strip
    puts product.at_css('.vproduct_list_descr').text.strip
    puts product.at_css('.price-value').text.strip
    puts product.xpath('//img[@width = 220]/@src').map {|a| a.value }
end

尝试更改:

puts product.xpath('//img[@width = 220]/@src').map {|a| a.value }

:

puts product.xpath('.//img[@width = 220]/@src').map {|a| a.value }

的点'。也就是说,你想要的所有图像都是当前节点的子节点(例如,这样你就不会偷看产品2的图像)。

File#basename将只返回文件名:

File.basename('http://www.test.com/product4.jpg')
#=> "product4.jpg"

你可能想要这样写:

puts product.xpath('//img[@width = 220]/@src').map {|a| File.basename(a.value) }

相关内容

  • 没有找到相关文章

最新更新