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
相关产品推荐
相关产品推荐

