我想通过Nokogiri宝石刮取实际开始时间。
<dl class="dates">
<dt>Actual Start Date & Time:</dt>
<dd class="date " >
<span data-name="Actual Start Date & Time" id="customfield_10207-val" data-fieldtype="datetime" >
<span title="19/Feb/14 3:14 PM">
<time datetime="2014-02-19T15:14+0000">19/Feb/14 3:14 PM</time>
</span>
</span>
</dd>
</dl>
任何人都可以看看并让我知道我需要应用什么 css 规则来抓取吗?
我会做的:
require 'nokogiri'
xml = <<_
<dl class="dates">
<dt>
Actual Start Date & Time:
</dt>
<dd class="date " >
<span data-name="Actual Start Date & Time" id="customfield_10207-val" data-fieldtype="datetime" >
<span title="19/Feb/14 3:14 PM">
<time datetime="2014-02-19T15:14+0000">
19/Feb/14 3:14 PM
</time>
</span>
</span>
</dd>
</dl>
_
doc = Nokogiri::XML(xml)
现在,您可以使用两种不同类型的CSS规则来抽出时间。我使用了at_css
,因为我对第一个与CSS规则匹配的节点感兴趣。但是您的要求是收集多个与 CSS 规则匹配的节点,因此请使用方法 css
.它将为您提供Nodeset
,它将保存与您的CSS规则匹配的所有节点。现在,您可以使用each
方法循环访问 Nodeset 集合中的每个节点。
date = doc.at_css('#customfield_10207-val > span')['title']
date # => "19/Feb/14 3:14 PM"
date = doc.at_css('#customfield_10207-val > span > time').text.strip
date # => "19/Feb/14 3:14 PM"
请浏览 CSS3/选择器以了解 CSS 规则。
require 'nokogiri'
require 'open-uri'
source = open('http://www.example.com/time.html')
doc = Nokogiri::HTML(source)
doc.css('dd.date time').first.content
=> "19/Feb/14 3:14 PM"