使用Nokogiri从“数据”中删除值?

时间:2013-08-30 13:20:32

标签: ruby nokogiri

我有这样的东西:

<div class="new-faceout p13nimp" id="purchase_B005ZVWBGK" data-asin="B005ZVWBGK" data-ref="pd_sim_hg_1">

我正在废弃这样的数据:

 product_product = @data.css('#purchaseShvl')

    product_product.css('.shoveler-cell').each do | product_product |
      product_product_asin  = product_product.xpath('.//div[@class="new-faceout"]')

(等...)

如何提取data-asindata-ref

的值

我试过了:

 product_product_asin  = product_product.xpath('.//div[@class="new-faceout"]/@data-ref').first.value

但该值返回nil

实时网页:http://www.amazon.com/gp/product/B00BATSB60/

2 个答案:

答案 0 :(得分:2)

使用Nokogiri::XML::Node#attr方法获取属性:

>> prd = product_product.at_css('.new-faceout')

>> prd.attr('data-asin')
=> "B005ZVWBGK"
>> prd.attr('data-ref')
=> "pd_sim_hg_1"

您还可以使用Nokogiri::XML::Node#[]

>> prd['data-asin']
=> "B005ZVWBGK"
>> prd['data-ref']
=> "pd_sim_hg_1"

答案 1 :(得分:0)

使用XPath指定HTML类有点棘手。在这种情况下,您不能只使用[@class="new-faceout"],因为class属性的实际值为new-faceout p13nimp,因此它不匹配。你需要使用这样的东西:

[contains(concat(' ', @class, ' '), ' new-faceout ')]

作为条件。 Stack Overflow上有很多关于此问题的问题,以及网络上的其他问题。

使用Nokogiri,您可以结合使用css和XPath来生成更简单的技术,首先使用CSS获取节点,然后使用XPath,例如

@data.at_css('.new-faceout').at_xpath('./@data-ref')

或者,如果您使用CSS获取节点,则可以使用Nokogiri方法attribute(或attr或仅[]直接获取属性值:

@data.at_css('.new-faceout')['data-ref']