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

如何使用Nokogiri解析银行网页表格并提取近6个月的交易数据

实现方案

核心思路

  • 预先计算6个月前的截止日期,不需要提前拉取全量数据校验
  • 利用银行交易表默认按时间倒序排列(最新记录在前)的特性,遍历行时一旦遇到早于截止日期的记录,直接终止遍历即可
  • 遍历每行时优先提取日期字段做校验,符合时间范围再处理其余交易信息

优化后代码

require 'date'

def get_transactions
  # 计算6个月前的截止日期
  cutoff_date = Date.today << 6
  # 原有页面跳转逻辑
  $b.a(:href => "#/history_operations").click!
  sleep 5
  doc = Nokogiri::HTML.parse($b.html)
  table = doc.css('#simpleTable0')

  table.search('tr').each do |tr|
    # 提取日期字段,需替换为实际表格日期列的选择器,演示页日期一般在对应日期类的节点中
    date_str = tr.css('.operationDate').text.strip
    # 跳过表头、空行等无有效日期的行
    next if date_str.empty?
    # 解析日期,适配演示页的dd.mm.yyyy格式
    begin
      transaction_date = Date.strptime(date_str, '%d.%m.%Y')
    rescue Date::Error
      next
    end

    # 遇到早于截止日期的记录直接终止遍历,后面的记录时间更早无需处理
    break if transaction_date < cutoff_date

    # 以下是原有交易描述处理逻辑
    payment_description = tr.search('.paymentDescription').text
    p = payment_description.split('  ', -1)
    p.each do |i|
      puts i.delete('  ')
    end
  end
end

注意事项

  • 需将代码中.operationDate替换为你实际表格中日期列对应的CSS选择器,可通过浏览器F12检查元素获取
  • 若你的表格是按时间正序排列,将break改为next即可,银行流水普遍为倒序排列,用break可最大化提升爬取效率
  • 如日期格式和示例不同,调整Date.strptime的第二个参数适配即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:24:00