我有网页,我需要从中删除一些数据.问题是,每个页面可能有也可能没有特定的数据,或者它可能在DOM中高于或低于它的额外数据,并且没有CSS ID可以说.
通常我可以使用CSS ids或XPath来获取我正在寻找的节点.在这种情况下,我没有这个选择.我想要做的是搜索“标签”文本,然后在下一个< TD>中获取数据.节点:
<tr> <td><b>Name:</b></td> <td>Joe Smith <small><a href="/Joe"><img src="/joe.png"></a></small></td> </tr>
在上面的HTML中,我会搜索:
doc.search("[text()*='Name:']")
在我需要的数据之前获取节点,但我不知道如何从那里导航.
解决方法
next_element
可能是您要查找的方法.
require 'nokogiri' data = File.read "html.htm" doc = Nokogiri::HTML data els = doc.search "[text()*='Name:']" el = els.first puts "Found element:" puts el puts puts "Parent element:" puts el.parent puts puts "Parent's next_element():" puts el.parent.next_element # Output: # # Found element: # <b>Name:</b> # # Parent element: # <td> # <b>Name:</b> # </td> # # Parent's next_element(): # <td>Joe Smith <small><a href="/Joe"><img src="/joe.png"></a></small> # </td>
请注意,由于文本位于< b>< / b>之内标签,您必须上升一个级别(到找到的元素的父< td>),然后才能进入下一个兄弟.如果HTML结构不稳定,则必须找到第一个父项,这是< td>并从那里走.