css - 通过 nokogiri 和 xpath 解析图像

标签 css ruby xpath nokogiri

我目前有一段代码可以获取产品名称、描述和价格,而且效果很好。但是,我还需要它来获取图像 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

最佳答案

尝试改变:

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

到:

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

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

关于css - 通过 nokogiri 和 xpath 解析图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120523/

相关文章:

html - 如何使用 XPath 选择包含单引号的元素?

javascript - 按下按钮时百分比条上升

jquery - 在 twitter bootstrap 中制作两个下拉菜单

ruby - 在 Ruby 中打包/解包 UUID

ruby-on-rails - Rails、Count 和 Group

ruby-on-rails - 类型错误 : Object doesn't support this property or method

html - 我如何使用 CSS 来选择和设置所有具有 UL 子元素的 LI 元素的样式?

html - 将鼠标悬停在按钮上时动态添加 CSS

java - 什么 XPath 只选择 div 内的非标记文本。 Selenium 。 java

python - 使用 Python/lxml 和 XPath 检索属性名称和值