事情经过
我们的爬虫脚本是一直持续运行的,通过监听队列实现。然而,数据使用端反馈到我们2.27号提供的数据有错误,获取到的数据是最佳路径,而不是驾车路径。我刚开始对此表示差异,我们的代码已经跑了至少半年,在这半年期间,代码没有修改过数据处理逻辑,一直稳定运行。我正纳闷,一点也不想去打开项目工程,调试【出于对自己代码的完全自信与对调试旧代码的强烈抵触】。我正想通过其他方法去看看问题,但最后一想,最有可能出问题的,应该就是爬虫请求的url可能被更改,或者请求过后,目标网站重定向了我的请求,并响应了不是我想要的结果。我还是决定调试一下代码,看看能不能修复问题。
我打开项目代码,在构造url函数位置输出url,然后构造爬虫任务,运行起来,观察url的结果。结果十分可怕,我最终的结果是:https://xxxxxxxxx/htmls=!4m2!4m1!3e0 由于很长时间没有调试过这个代码,我天真的以为这个数据,没问题。但是出于多年处理数据的职业敏感,我还是在浏览器上打开了这个链接,看看有什么不同。结果是,这个链接对应的路径规划并不是需求里指定的驾车路径,而是目标网站提供的最佳路径,这个数据完全是错误的!!
我调取之前下载数据的示例链接,示例链接为:https://xxxxxxxxx/data=!4m2!4m1!3e0 为什么我最终请求的链接查询参数是htmls?这不符合常理,也不可能是我操作,究竟是什么原因?
我打开编辑器,找到拼接url与请求的python文件,调取更新历史,结果发现2.24日,我将的data字符串更新为htmls。我搜索了全部文件,所有配置文件,原来关键字是data,现在变为了htmls。而这个异常的代码已经稳定运行10天,我们没有任何人察觉。这是非常可怕的,在数据系统里,这个很有可能导致公司亏钱,属于生产失误,是要追究到我的!这个责任我还承担不起,只能抓紧时间修复问题,然后主动上报最近数据的异常,对于后续的数据,恢复正常生产。数据下游还有好几百号人在使用,考虑到这种危机,我开始一点一点将代码恢复。
我先停掉所有正在运行的爬虫服务,以免持续产生错误数据。然后将所有爬虫项目内使用到类似链接的配置文件与爬虫文件,将所有htmls字符串更新为data,同时增加请求链接日志,为后续可能存在的问题做好记录。我将所有代码修改后,提交代码部署到每台任务机器,然后恢复运行。
我下面开始找原因:
我列举了以下原因:
- 哪天我睡着了,把代码改了,准备跑路
- 玛德哪个狗改我代码,还这么熟悉我的代码逻辑,直接改关键位置,难以发现
- 编辑器出现了问题
我通过深思熟虑,主要是看了会儿抖音直播,看别人钓鱼。突然一惊,我突然想到,我们在删除目录内的文件时,编辑器会溯源,看看工程里面哪里用到了,然后将所有用到的位置提示给你,你可以选择do refactor直接替换,或者你逐个文件修改。我当时估计,我是直接按了回车,所以就全部被替换了。。。。
可怕,我以后都不敢这么干了。以后改代码,还是小心谨慎得好,文件命名删除啥的都需要多注意。