我需要访问表格最后一行中第10个<td>
元素的值。我不能使用ID作为钩子,因为只有表具有ID。我已经设法使用下面的代码使其工作。不幸的是,它的静态。我知道我将永远需要第10个<td>
元素,但我永远不知道它需要哪一行。我只知道它需要是表格中的最后一行。如何动态地将"tr[6]"
替换为实际的最后<tr>
? (这可能很容易,但这实际上是我第一次用红宝石做任何事情。)
page = Nokogiri::HTML(open(url))
test = page.css("tr[6]").map { |row|
row.css("td[10]").text}
puts test
答案 0 :(得分:2)
你想这样做:
page.at("tr:last td:eq(10)")
答案 1 :(得分:0)
如果您不需要对页面执行任何其他操作,则可以使用
实际创建一行test = Nokogiri::HTML(open(url)).search("tr").last.search("td")[10].text
否则(这会起作用):
page = Nokogiri::HTML(open(url))
test = page.search("tr").last.search("td")[10].text
puts test
示例:(使用StackOverflow上另一个问题的大表)
Nokogiri::HTML(open("http://en.wikipedia.org/wiki/Richard_Dreyfuss")).search('table')[1].search('tr').last.search('td').children.map{|c| c.text}.join(" ")
#=> "2013 Paranoia Francis Cassidy"
您是否有特殊原因需要Array
包含1个元素?我的示例将返回一个字符串,但您可以轻松修改它以返回Array
。
答案 2 :(得分:0)
您可以使用CSS pseudo class selectors:
page.css("table#the-table-id tr:last-of-type td:nth-of-type(10)")
首先选择具有相应<table>
的{{1}},然后选择该表的最后一个id
子项,然后选择{{1}的第10个<tr>
}}。结果是所有匹配元素的数组,如果您希望只有一个,则可以使用<td>
代替。
如果您更喜欢XPath,可以使用:
<tr>