加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何搜索“文本”,然后从找到的节点遍历DOM?

发布时间:2020-12-16 20:27:58 所属栏目:百科 来源:网络整理
导读:我有网页,我需要从中删除一些数据.问题是,每个页面可能有也可能没有特定的数据,或者它可能在DOM中高于或低于它的额外数据,并且没有CSS ID可以说. 通常我可以使用CSS ids或XPath来获取我正在寻找的节点.在这种情况下,我没有这个选择.我想要做的是搜索“标签”
我有网页,我需要从中删除一些数据.问题是,每个页面可能有也可能没有特定的数据,或者它可能在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>并从那里走.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读