图片爬虫小结

2017-10-30  本文已影响0人  死鱼

前言

本文主要分享在爬站点图片过程中的一些踩坑总结

工具使用的是nodejs,外部依赖只使用了request、redis

分布式爬虫结构(类actor)

生产者爬取所有列表->产出pageUrl->生成任务给任务中心。

消费者注册->中心分配任务给消费者->消费者解析pageUrl成图片->下载到本地->回调中心

生产坑

1、任务过多,导致队列太大,内存溢出

解决方法:

1)使用redis均衡负载(靠谱

2)设置任务数量上限(成本低

解析坑

1、偶尔由于站点问题解析失败

图片站点服务未必稳定,有可能出现渲染失败的情况。这时候重试机制应该放在解析服务中,而不是由下载服务发起重试。

消费坑

1、远古资源下载速度极慢

原因1)

站点本身资源提供不稳定,某些资源永远请求都无响应。

解决方法:

设置超时重试,到一定次数则放弃该资源下载即可

原因2)

远古资源没有做CDN缓存,回源时间较长

解决方法:

1)坐等CDN回源

2)提前发起请求,然后消费者重新提交该任务,等下次消费到的时候就能下载CDN缓存的内容了

2、标题导致存储本地失败

原因&解决:

3、有部分重复广告图、脏数据

原因:

站点某些列表中的图片未必是我们需要的图片,有可能是站点下架后,摆上来的广告图。

解决方法:

1)存储几个文件MD5在本地,下载文件之前校验MD5是否match上广告图MD5,然后制定策略(更快)

2)下载后做离线处理,把一些几K的文件、脏数据清理掉(更稳)

4、失败case无法重跑

现象:

消费者拿完任务去下载,遇到异常失败的时候,没由正确收集失败case的方法。

解决方法:

1)在任务中心发任务和收任务、回调任务时做对比。保存失败的任务(优)

2)消费者自己记录失败case(已废弃)

上一篇 下一篇

猜你喜欢

热点阅读