gpt4 book ai didi

ruby - 如何搜索 "text"然后从找到的节点遍历 DOM?

转载 作者:数据小太阳 更新时间:2023-10-29 06:35:34 26 4
gpt4 key购买 nike

我有一个网页,我需要从中抓取一些数据。问题是,每个页面可能有也可能没有特定数据,或者在 DOM 中它的上方或下方可能有额外的数据,并且没有 CSS id 可言。

通常我可以使用 CSS id 或 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> 的父级然后从那里开始。

关于ruby - 如何搜索 "text"然后从找到的节点遍历 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com