Ruby 从“中删除值”;数据-“;和Nokogiri?

Ruby 从“中删除值”;数据-“;和Nokogiri?,ruby,nokogiri,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').

我有这样的东西:

<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"]')
[contains(concat(' ', @class, ' '), ' new-faceout ')]
(等等……)

如何提取
数据asin
数据ref
的值

我试过这个:

 product_product_asin  = product_product.xpath('.//div[@class="new-faceout"]/@data-ref').first.value
但该值返回
nil

活动页面:

使用方法获取属性:

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

>> prd.attr('data-asin')
=> "B005ZVWBGK"
>> prd.attr('data-ref')
=> "pd_sim_hg_1"
您还可以使用:


用XPath指定HTML类有点棘手。在这种情况下,您不能只使用
[@class=“new faceout”]
,因为
class
属性的实际值是
new faceout p13nimp
,因此它不匹配。您需要使用类似以下内容:

<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"]')
[contains(concat(' ', @class, ' '), ' new-faceout ')]
视情况而定。关于堆栈溢出,这里和web上的其他地方都有很多问题

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

@data.at_css('.new-faceout').at_xpath('./@data-ref')
或者,如果您已使用CSS获取节点,则可以使用Nokogiri方法
属性
(或
attr
或仅
[]
直接获取属性值:

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

为什么这是
product\u product.css('.new-faceout')[0]
?哼,这是我想告诉你的…:)为什么我们需要
concat(''',@class',)
呢?@Babai,防止像
new-faceout包装器这样的匹配属性值与
包含的(@class,'new-faceout')不同
@falsetru请停止猜测..根据可用信息回答总是好的,这将有助于未来的读者..对我来说没有价值..可能有很多东西,我们不应该从中猜出一个。。按照问题回答很好。@Babai,也使用了类似的表达方式。@falsetru谢谢。。我明白了。。我的答案也一样。。谢谢你的及时回复。。