You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nokogiri中使用条件判断?缺失锚标签时填充“No Url Found”

解决Nokogiri解析HTML表格时文本与URL数量不匹配的问题

我懂你现在的困扰——提取的文本有50条,但单独抓的href只有47条,因为部分里根本没有锚标签,这直接导致后续数据对应错位。咱们可以通过在遍历的过程中加入条件判断来搞定这个问题,同时保证文本和URL列表的数量完全匹配。

Nokogiri中的条件判断核心用法

在处理每个节点时,我们可以用at_css('a')来检查当前下是否存在子级标签:

基于这个返回值,我们就能用Ruby的条件逻辑(if-else或者更简洁的三元运算符)来决定是取真实的href,还是填充我们指定的默认值。

完整解决方案代码

不再分开提取所有文本和所有URL,而是逐个处理每个目标节点,这样每个文本都会对应一个URL(要么是真实链接,要么是默认填充值):

# 遍历你需要处理的<td>集合(这里根据你的代码,假设是nth-child(1)的<td>)
page.css("td:nth-child(1)").each do |td|
  # 提取<td>的文本内容,和之前的逻辑一致
  company_name = td.text.strip
  
  # 检查当前<td>是否包含<a>标签
  anchor_tag = td.at_css('a')
  
  # 条件判断:存在锚标签则取href,否则填充默认值
  directory_url = if anchor_tag
                    anchor_tag['href']
                  else
                    "No Url Found"
                  end
  
  # 输出结果(也可以存入数组供后续使用)
  puts "公司名称: #{company_name}, 链接: #{directory_url}"
end

如果喜欢更简洁的写法,可以用三元运算符替换if-else:

page.css("td:nth-child(1)").each do |td|
  company_name = td.text.strip
  anchor_tag = td.at_css('a')
  directory_url = anchor_tag ? anchor_tag['href'] : "No Url Found"
  puts "公司名称: #{company_name}, 链接: #{directory_url}"
end

存入数组的版本(方便后续处理)

如果需要把结果存入数组,保证两个数组长度完全匹配:

company_names = []
directory_urls = []

page.css("td:nth-child(1)").each do |td|
  company_names << td.text.strip
  anchor_tag = td.at_css('a')
  directory_urls << (anchor_tag ? anchor_tag['href'] : "No Url Found")
end

# 验证数量是否一致
puts "文本总数: #{company_names.length}"
puts "URL总数: #{directory_urls.length}"

这样处理后,不管里有没有锚标签,company_names和directory_urls的长度都会完全一致,再也不会出现错位的问题了。

内容的提问来源于stack exchange,提问作者Ruel Nopal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:13:20