1

我有这样的东西:

<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"]')

(ETC...)

如何提取 和 的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/

4

2 回答 2

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"
于 2013-08-30T13:30:23.453 回答
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']
于 2013-08-30T13:42:14.813 回答