Ruby Nokogiri库怎么用XPath搜索文档

星降
发布: 2025-12-14 11:55:02
原创
538人浏览过
Nokogiri 是 Ruby 中最常用的 HTML/XML 解析库,用 XPath 搜索高效直接;加载文档后调用 search 返回 NodeSet,at 返回单个 Element,支持丰富 XPath 语法及命名空间处理。

ruby nokogiri库怎么用xpath搜索文档

Nokogiri 是 Ruby 中最常用的 HTML/XML 解析库,用 XPath 搜索非常直接高效。核心就是调用 searchat 方法,传入合法的 XPath 表达式。

基础用法:加载文档后直接 search

先解析 HTML 或 XML 字符串(或文件),再用 search 返回所有匹配节点(NodeSet),用 at 返回第一个匹配节点(Element):

require 'nokogiri'
<p>html = '<div><p class="intro">Hello</p><p>World</p></div>'
doc = Nokogiri::HTML(html)</p><h1>查找所有 p 标签</h1><p>ps = doc.search('//p')          # → NodeSet 包含两个 <p></p><h1>查找带 class="intro" 的 p 标签</h1><p>intro_p = doc.at('//p[@class="intro"]')  # → Element 对象</p>
                    <div class="aritcle_card">
                        <a class="aritcle_card_img" href="/ai/1624">
                            <img src="https://img.php.cn/upload/ai_manual/000/969/633/68b6d995a3e16812.png" alt="NameGPT">
                        </a>
                        <div class="aritcle_card_info">
                            <a href="/ai/1624">NameGPT</a>
                            <p>免费的名称生成器,AI驱动在线生成企业名称及Logo</p>
                            <div class="">
                                <img src="/static/images/card_xiazai.png" alt="NameGPT">
                                <span>119</span>
                            </div>
                        </div>
                        <a href="/ai/1624" class="aritcle_card_btn">
                            <span>查看详情</span>
                            <img src="/static/images/cardxiayige-3.png" alt="NameGPT">
                        </a>
                    </div>
                <h1>获取文本内容</h1><p>intro_p.text  # → "Hello"
登录后复制

常用 XPath 写法示例

XPath 支持丰富语法,以下是最常遇到的几种场景:

  • //div[@id='main'] —— 查找任意层级下 id 为 main 的 div
  • //a[contains(@href, 'github')] —— href 属性包含 "github" 的链接
  • //ul/li[1] —— 第一个 li 子元素(注意:XPath 索引从 1 开始)
  • //input[@type='text' and @name] —— type=text 且有 name 属性的 input
  • //div//span —— div 内任意深度的 span(后代,非直系子元素)
  • //div/child::span —— div 的直接子 span(等价于 //div/span

处理结果:NodeSet 和 Element

search 返回的是 Nokogiri::XML::NodeSet,可像数组一样遍历或索引;at 返回单个 Nokogiri::XML::Element,更轻量:

  • 遍历结果:doc.search('//a').each { |a| puts a['href'] }
  • 取第一个:doc.search('//img').first['src']doc.at('//img')['src']
  • 检查是否存在:doc.at('//button[@disabled]') ? '禁用中' : '可用'
  • 提取多个属性:doc.search('//meta').map { |m| [m['name'], m['content']] }

注意命名空间和 HTML 特殊性

如果是 XML 且含命名空间(如 SVG、Atom),需先声明前缀:

xml = '<rss xmlns:dc="http://purl.org/dc/elements/1.1/">...</rss>'
doc = Nokogiri::XML(xml)
doc.search('//dc:creator', 'dc' => 'http://purl.org/dc/elements/1.1/')
登录后复制

而对 HTML 文档,Nokogiri 默认使用宽松解析,XPath 大多能直接用。但注意:
– HTML 标签名不区分大小写,但 XPath 表达式里建议用小写(//div 而非 //DIV);
– 某些属性名在 HTML 中是布尔型(如 checked),XPath 中仍用 [@checked] 判断是否存在即可。

基本上就这些。XPath 写熟了,配合 Nokogiri 的 search/at,抓取和校验结构化内容非常顺手。

以上就是Ruby Nokogiri库怎么用XPath搜索文档的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号