对于爬虫的一些思考

最先应该思考的问题

  • 稳定性
  • 除重

爬虫的稳定性

由于项目并不会投入太多的时间,所以稳定性能是最终的。稳定性的可以从以下的维度进行考虑:

  1. 数据量不多的时候采用单线程。
  2. 异常处理。
  3. 重试。
  4. 详细的日志。
    个人觉得数据量少就是在40小时内遍历全部并且可以爬完的就是小数据量。
    异常处理主要就是放在请求网站时、入库。
    而重试主要是用traceback这个库,它的作用是捕捉到特定异常、设定重试间隔的时长、间隔时常的增长策略。如果真的想不到要在什么地方写重试就思考:
  • 断网的情况下会出现什么情况,重试多次以后会抛出什么异常。
  • 如果有验证码,而你是用打码平台的API,调用接口的时候会有什么异常。
  • 目标网站爬挂会有什么异常。
  • 爬取到数据后要进行数据入库,入库是不是会遇到插入失败的问题、如果是唯一索引会数据库会抛出什么异常。当遇到异常的时候是不是需要进行回滚操作。
  • 最后清洗数据的时候如果是用Xpath提取信息,通常结果返回的结果是一个列表,如果有通过索引取值,会不会导致index out of range?

日志的打印:
一开始可能会对什么地方需要进行日志打印感觉一点头绪都没。
我个人总结了几点,

  • 在开发的时候你想知道某一个变量的值是什么是不是需要print来打印?这一类的打印归为debug日志。
  • 你想知道此时什么函数在运行,例如现在访问页面的一个接口,接口是什么,你就想打印现在到哪一个函数它在干什么就是info日志。
  • 最后捕捉异常如果是很严重的异常需要立刻处理的就是error不需要及时处理就是warnning,举个例子,我某一个接口请求失败了,但是有重试,我在捕捉到链接错误的时候使用的是warnning日志,因为我还没有必要及时处理,我还有重试在运行,而如果我已重试多次后,登录失败了,或者是某些网站只有首页,一旦首页爬取失败了往下所有爬取都会失败。我就不得不去处理。此时还可以用钉钉的机器人进行告警,以保证错误可以及时处理。

除重

除重的策略主要是:

  1. 内容长的进行hash处理,通过对比hash来替代对比内容,例如图片,可以通过base64转码后hash缩小成64位,这样的图片就不会有重复。
  2. 添加唯一索引,如果值有大量重复的列就不建议做唯一索引,例如性别,而币种名称就可以作为唯一索引,假如数据是一直在更新的那么可以尝试唯一联合索引,例如币种名称和创建次条信息的时间。
  3. redis。
  4. 插入数据前先查一次,如果有对象就返回没有就插入。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值