Heroku+Flask+GitHub Action部署Python脚本更新后Spreadsheet缺新列
线上爬虫缺失新增列问题排查方案
高频根因
这类本地/Colab运行正常、线上定时任务输出缺字段的问题,90%集中在以下几类场景:
- 线上运行的代码根本不是最新版本
多数人默认推送到GitHub主分支后线上会自动同步,实际上很容易踩几个坑:GitHub Action拉取代码的分支配置错误、Heroku关联GitHub自动部署的开关没打开、Action配置了依赖/代码缓存复用了旧版本文件,最终线上跑的还是改逻辑之前的旧脚本。 - 线上环境依赖、配置和本地不一致
新列逻辑用到的解析、写入方法在requirements.txt锁定的旧版本依赖里不生效,且代码没做异常捕获,不会抛出显性错误直接跳过字段;新逻辑用到的环境变量、格式开关在Heroku/GitHub Action的配置后台漏填,触发分支判断时直接走了不带新列的旧输出格式分支。 - 线上请求拿到的目标网站内容和本地不一致
Heroku、GitHub Action的出口IP和本地/Colab不同,很可能被目标网站反爬策略识别,返回残缺页面、旧版页面,新列对应的页面元素匹配不到值,又没打日志就直接跳过写入。 - Spreadsheet写入逻辑硬编码
写入代码里写死了列数、列名映射关系,新列没加入映射表就算采集到了也不会写入;或是线上配置的Spreadsheet凭证对应的工作表没更新表头,按表头匹配写入时自动跳过了不存在的列。
排查步骤(按优先级从高到低执行,不用全走完基本就能定位问题)
- 先核线上运行的代码版本
- 查GitHub Action运行日志里的拉代码步骤,确认拉取的commit哈希和本地最新提交的哈希完全一致;如果是Heroku dyno直接运行任务,进Heroku控制台打开应用的命令行,直接
cat你的爬虫主脚本,确认里面已经包含新增列的采集逻辑——这步能解决60%的同类问题。 - 如果Action配置了
actions/cache缓存依赖或代码,先手动清空所有缓存重跑任务,避免旧缓存被复用。
- 查GitHub Action运行日志里的拉代码步骤,确认拉取的commit哈希和本地最新提交的哈希完全一致;如果是Heroku dyno直接运行任务,进Heroku控制台打开应用的命令行,直接
- 补节点日志缩小排查范围
在三个关键节点加打印日志:新列字段解析完成后打印采集到的值、组装写入Spreadsheet的数据集前打印全量字段列表、调用Spreadsheet写入接口后打印接口返回结果。把日志级别开到debug,手动触发一次线上任务,直接看日志里哪一步丢了新列字段。
同时在线上环境执行pip freeze导出依赖列表,和本地跑通环境的依赖版本做比对,重点核对爬虫解析、表格写入相关的包,版本不一致的直接把本地验证过的版本号锁死写到requirements.txt里。 - 核对配置与分支逻辑
把Heroku、GitHub Action后台配置的所有环境变量导出来,和本地调试用的.env文件逐行比对,重点核对控制两种输出格式的开关参数,确认线上没有因为参数值不对走到旧格式的输出分支。 - 校验线上请求的响应内容
在爬虫发起请求拿到响应的步骤后,把响应文本片段打到日志里,确认线上拿到的页面结构和本地一致,没有被反爬拦截、返回缺字段的旧页面。 - 检查写入逻辑
排查写入Spreadsheet的代码段,确认没有硬编码列范围(比如之前写死只写入A到F列,新列在G列就会被直接截断);如果是按表头匹配写入,确认线上连接的目标工作表已经提前加了新列的表头,没有拼写、空格类的匹配错误。
排查时不要等每日定时任务触发,直接手动触发线上任务,每修改一处配置/代码就跑一次验证,排查效率能提升数倍。
内容的提问来源于stack exchange,提问作者polo
相关产品推荐
相关产品推荐

