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谢谢。。我明白了。。我的答案也一样。。谢谢你的及时回复。。