【问题标题】:Parsing images via nokogiri and xpath通过 nokogiri 和 xpath 解析图像
【发布时间】:2013-02-27 19:21:06
【问题描述】:

我目前有一段代码可以获取产品标题、描述和价格,因此效果很好。但是,我还需要它来获取我的困境所在的图像 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

【问题讨论】:

  • 如果您不包含您要解析的 HTML,我们将无法为您提供太多帮助。

标签: css ruby xpath nokogiri


【解决方案1】:

尝试改变:

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

到:

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

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

【讨论】:

    【解决方案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) }
    

    【讨论】:

    猜你喜欢
    • 2013-03-21
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2010-09-22
    • 2014-12-22
    相关资源
    最近更新 更多