获取所有以“ABC”开头的ID的节点

时间:2012-12-15 16:02:31

标签: css ruby nokogiri

我正在尝试使用Ruby和Nokogiri来抓取一个包含大约10列的页面,大多数列通过具有唯一的类名非常简单。但是,它们中的一些具有类ID,它们似乎将长数字符串附加到标准类名称上。

例如,游戏时间全部采用.eventLine-time,团队名称为.team-name,但这个特定的游戏时间有:

<div class="eventLine-book-value" id="eventLineOpener-118079-19-1522-1">-3&nbsp;-120</div>

.eventLine-book-value并非特定于此列,因此无用。每个游戏的13位数都不同,尝试类似:

def nodes_by_selector(filename,selector)
file = open(filename)
doc = Nokogiri::HTML(file)
doc.css(^selector)
end

给我留下了错误。我已经看到^和〜用于其他语言,但我是新手,我已经尝试寻找方法来获取id=eventLineOpener-XXXX下的所有数据但无济于事。

1 个答案:

答案 0 :(得分:1)

要获取id=eventLineOpener-XXXX下的所有数据,您需要将'div[id*=eventLineOpener]'作为选择器传递:

def nodes_by_selector(filename,selector)
  file = open(filename)
  doc = Nokogiri::HTML(file)
  doc.css(selector)  #doc.css('div[id*=eventLineOpener]')
end

上述方法会返回一个Nokogiri::XML::Elementid=eventLineOpener-XXXX个对象的数组。

此外,要提取每个Nokogiri::XML::Element对象的内容,您需要迭代这些对象中的每一个,并对这些对象使用text方法。例如:

doc.css('div[id*=eventLineOpener]')[0].text