我正在尝试使用 Ruby 和 Nokogiri 抓取一个包含大约 10 列的页面,其中大多数列都非常简单,因为它们具有唯一的类名。但是,其中一些具有类 ID,这些类 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
下获取所有数据的方法,但无济于事。
要获取 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
上面的方法将返回一个具有id=eventLineOpener-XXXX
的Nokogiri::XML::Element
对象的数组。
此外,若要提取每个Nokogiri::XML::Element
对象的内容,需要循环访问其中每个对象,并在这些对象上使用 text
方法。例如:
doc.css('div[id*=eventLineOpener]')[0].text