新闻中心

Ruby Nokogiri库怎么用XPath搜索文档

2025-12-14
浏览次数:
返回列表
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/955">
                            <img src="https://img.php.cn/upload/ai_manual/001/503/042/68b6d17fe12d9828.png" alt="Glarity">
                        </a>
                        <div class="aritcle_card_info">
                            <a href="/ai/955">Glarity</a>
                            <p>Glarity是一款免费开源的AI浏览器扩展,提供YouTube视频总结、网页摘要、写作工具等功能,支持免费的镜像翻译,电子邮件写作辅助,AI问答等功能。</p>
                            <div class="">
                                <img src="/static/images/card_xiazai.png" alt="Glarity">
                                <span>131</span>
                            </div>
                        </div>
                        <a href="/ai/955" class="aritcle_card_btn">
                            <span>查看详情</span>
                            <img src="/static/images/cardxiayige-3.png" alt="Glarity">
                        </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搜索文档的详细内容,更多请关注其它相关文章!


# 如何将  # 地推推广营销  # 全国公司网站建设推广  # 校园市场营销推广课  # 重庆做网站推广费用  # 内贸定制网站建设方案  # seo岗位 写多少  # 新闻seo系统采购  # 网站建设技术课件  # 广东seo排名团购平台  # 綦江区seo优化计划  # 的是  # 数据交换  # html  # 最常用  # 等功能  # 遍历  # 不需要  # 布尔  # 第一个  # 文档  # ai  # github  # svg  # node  # git 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 学习通网页版官方登录 超星学习通电脑端入口指南  消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技  QQ官网正版登录链接 QQ在线登录入口最新  Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址  PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符  J*aScript中向JSON对象添加新属性的正确姿势  漫蛙2在线漫画入口 漫蛙正版漫画网页版直达  Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  我的世界官方游戏入口 我的世界官网平台直达链接  AO3官网镜像链接 Archive of Our Own同人文在线浏览  网站内容防复制粘贴的实现策略与局限性  如何在网页中实现特定地点的随机图片展示  J*a应用程序首次运行自动创建文件与目录的最佳实践  现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践  大象笔记网页版入口 印象笔记网页版登录入口  AO3访问入口汇总 AO3网页版同人作品一键直达  Angular Material 垂直步进器:实现底部到顶部排序的教程  期待已久:小米17 Ultra、小米首款NAS本月登场  CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色  汽水音乐网页版使用入口_汽水音乐电脑版播放指南  QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录  Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】  c++项目目录结构应该如何组织_c++工程化项目结构规范  win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法  qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决  解决Tabulator日期时间排序问题的专业指南  Go语言中JSON数据解析与字段访问教程  css链接悬停下划线样式如何自定义_使用::after结合content和transition  将HTML Canvas内容转换为可上传的图像文件(File对象)  Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践  AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南  mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析  必由学官方平台入口 必由学在线课堂登录地址  CSS实现侧边栏导航项全宽圆角悬停背景效果  Eclipse怎么运行工程_Eclipse工程运行配置说明  J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程  J*aScript中在Map循环中检测并处理空数组元素  windows10怎么关闭系统提示音_windows10彻底静音设置方法  J*a编写用户注册与登录功能_掌握字符串与验证逻辑  知乎APP怎么管理已购盐选内容_知乎APP盐选内容购买记录与查看方法  夸克AO3官网入口_AO3镜像网站2025推荐  Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】  163邮箱登录密码 163邮箱忘记密码找回  必由学官网首页入口 必由学教师网页版登录指南  微信群消息显示延迟如何解决 微信群消息刷新优化方法  Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式  Mac怎么查看崩溃日志_Mac控制台错误报告分析 

搜索