我有网页,我需要从中抓取一些数据.问题是,每个页面可能有也可能没有特定数据,或者它可能在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>
Run Code Online (Sandbox Code Playgroud)
在上面的HTML中,我会搜索:
doc.search("[text()*='Name:']")
Run Code Online (Sandbox Code Playgroud)
在我需要的数据之前获取节点,但我不确定如何从那里导航.
Mic*_*ley 25
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>
Run Code Online (Sandbox Code Playgroud)
请注意,由于文本位于<b></b>标记内部,因此必须先升级(找到元素的父级<td>)才能进入下一个兄弟.如果HTML结构不稳定,则必须找到第一个父级,<td>然后从那里开始.
| 归档时间: |
|
| 查看次数: |
8854 次 |
| 最近记录: |