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

Ruby爬虫提取日期年份报错:undefined method 'split'问题求助

问题分析与解决

核心问题

你的代码报错是因为re数组中存在nil值(部分元素未匹配到有效日期字符串),对nil调用split方法会触发undefined method 'split' for nil:NilClass错误。另外,循环范围(0..size_dates)超出了数组索引范围(数组最大索引为size_dates-1),进一步导致获取到nil值。

修复后的代码

require 'nokogiri'
require 'open-uri'
require 'pp'

# 缓存页面内容,避免重复请求
unless File.readable?('data.html')
  url = 'https://www.bananatic.com/de/forum/games/'
  data = URI.open(url).read
  File.open('data.html', 'wb') { |f| f << data }
end

data = File.read('data.html')
document = Nokogiri::HTML(data)
links3 = document.css('.topics ul li div')

# 提取有效日期字符串并过滤空值
valid_dates = links3.map do |lk3|
  lines = lk3.css('.name').children.text.strip.split("\n")
  lines[2] if lines.size >= 3
end.compact # 移除数组中的nil元素

# 遍历有效日期,提取年份
valid_dates.each do |date_str|
  # 按格式拆分:日.月.年, 时:分 → 拆分出年份部分
  year = date_str.split('.')[2].split(',').first.strip
  puts "年份:#{year}"
end

关键优化点

  • 用compact方法过滤数组中的nil值,确保后续处理的都是有效日期字符串。
  • 先判断拆分后的行数组长度,避免索引越界产生nil。
  • 直接遍历过滤后的日期数组,无需手动处理索引,避免超出数组范围。
  • 针对“日.月.年, 时:分”格式,通过两次拆分(.和,)精准提取年份。

内容的提问来源于stack exchange,提问作者Cindy Adriana Bohrquez Santana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:40:17