我正在尝试使用Ruby和Nokogiri来抓取一个包含大约10列的页面,大多数列通过具有唯一的类名非常简单。但是,它们中的一些具有类ID,它们似乎将长数字符串附加到标准类名称上。
例如,游戏时间全部采用.eventLine-time
,团队名称为.team-name
,但这个特定的游戏时间有:
<div class="eventLine-book-value" id="eventLineOpener-118079-19-1522-1">-3 -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
下的所有数据但无济于事。
答案 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::Element
个id=eventLineOpener-XXXX
个对象的数组。
此外,要提取每个Nokogiri::XML::Element
对象的内容,您需要迭代这些对象中的每一个,并对这些对象使用text
方法。例如:
doc.css('div[id*=eventLineOpener]')[0].text