我目前有一段代码可以获取产品名称,描述和价格,因此效果很好。但是,我还需要它来获取图像URL,这是我的困境所在。我试着在我底部的循环中使用一个xpath,它列出了所有我不想要的产品上等于220的图像。所以基本上我得到这样的东西......
产品1标题在这里
产品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
产品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
答案 0 :(得分:2)
尝试更改:
puts product.xpath('//img[@width = 220]/@src').map {|a| a.value }
为:
puts product.xpath('.//img[@width = 220]/@src').map {|a| a.value }
'。'的要点可以说你想要所有当前节点的孩子的图像(例如,你不是在偷看产品2的图像)。
答案 1 :(得分:0)
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) }