我已经在这几个小时,我无法取得任何进展。 我不知道如何做以下,我习惯于数组和循环,而不是nokogiri对象。
我想在包含带有id ==“filmography”
的跨度的h2之后立即选择表格元素<h2><span id ="filmography>...
<table> # What I want to find
<tr>
<td>...
到目前为止,我已经使用了
objects = page.xpath("//h2" | "//table")
有一个nokogiri对象的数组,我测试每个id ==“Filmography”并将使用下一个对象,但返回的元素不按顺序排列,因为它们出现在页面上它们按顺序排列所有h2的然后是所有表格。
我能以某种方式将所有'h2'和'table'作为它们在页面上出现的顺序作为元素对象,并测试子对象'span'的id属性吗?
所有建议都表示赞赏,因为我完全陷入困境。
答案 0 :(得分:3)
这看起来应该有效:
page.xpath('h2//span[@id="filmography"]').first.next_element
答案 1 :(得分:1)
Nokogiri支持CSS选择器,这使这很容易:
doc.at('span#filmography table').to_html
=> "<table><tr>\n<td>...</td>\n </tr></table>"
doc.at('#filmography table').to_html
=> "<table><tr>\n<td>...</td>\n </tr></table>"
at
使用CSS或XPath选择器返回第一个匹配的节点。
“NodeSet”等价物是search
,它返回一个NodeSet,就像一个数组,但是会强制你在它之后使用first
,这只会导致更长的命令: / p>
doc.search('span#filmography table').first.to_html
doc.search('#filmography table').first.to_html
由于span
标记包含id
参数,因此您可以安全地使用at
并仅查找#filmography
,因为ID在页面中是唯一的。< / p>