python爬虫代码提高健壮性
爬虫代码的健壮性
刚刚工作,写出来的爬虫代码经常出bug。循环爬取过程经常中断。对于现在遇到的坑做一下总结。
第一个,爬虫代码和平时的小代码的区别:
- 爬虫代码每一次请求,都会获得新的数据,这意味着获得新的外来变量。和小程序的单一变量,就有所区别。外来变量,就需要判断是否符合自己的要求。这就该表平时代码一根筋的写到底了。对于每一次请求,都应该确认获得的数据。分辨数据是否影响后续操作,对于错误的信息直接raise 错误,如果仅需保留错误信息就可以try它,记录错误。
- 文件读写,文件读写常见错误是,文件占用和文件编码。对于爬虫来说,使用utf-8的编码更为保险。所以对于文件操作,一定要带上编码。
- 对于连接可以尝试错误重试的方法的。
- 错误不应该启动分支,不能让错误变成一种goto的语句。
第二个,小步试错再大范围使用:
- 对于采集时间过长的爬虫,需要使用这一原则。
- 工程码requests的timeout不一定最好的解决方法。对于不稳定的接口,可以使用重试(retry装饰器)的方法。(后来的工作发现对于大批量的采集这个是刚需)
第三个,工作方式:
- 爬虫爬取得字段可能是某一部分,有时需要变更字段,造成不必要的麻烦。所以第一次爬取就把页面所有的字段进行解析。
- 对于这些爬虫字段需要,先获取页面的字段,登记进入表格,再对应数据库的字段存进数据库即可。
- Excel工具的使用,可以用于整理采集字段,对于页面上有对应id,可以采用全采集的方式,对于没有固定id的页面,可以增量多少采集多少。
小结:代码的过程中思考,requests中断怎么处理,requests返回错误怎么处理,文件操作怎么编码。