故障分析系列(01) —— scrapy爬虫速度突然变慢原因分析
1. 问题背景
- 在所有环境都没变的情况下,scrapy爬虫每天能爬取的数据量从3月5号开始急剧减少,后面几天数据量也是越来越少。
2. 环境
- 系统:win7
- python 3.6.1
- scrapy 1.4.0
- 网络:电信100Mb
- 代理:阿布云(服务商是阿里云)
- 爬取站点:amazon,amztracker
3. 排查步骤
3.1. 抓取scrapy爬虫的Log
# 文件 settings.py中
import datetime
LOG_LEVEL = 'DEBUG' # log等级设置为debug模式
startDate = datetime.datetime.now().strftime('%Y%m%d')
LOG_FILE = f"redisClawerSlaver_1_log{startDate}.txt" # 将log写入文件中
# 小技巧:因为debug模式下,一天下来,log会非常大,用Notepad++无法打开,可以使用UltraEdit来打开
-
后来分析Log,搜索failed, 发现了大量的 timeout error,占到了错误的九成,而且这两个站点的链接都有:
-
大量的Timeout会导致大量的重试,而且每个timeout,都要等待20s,才返回错误,所以极大的拉慢了爬虫的速度。
-
结论1:所以大胆猜测可能有几个原因:
-
第一,本地网络变慢。
-
第二,爬取的站点发生了变化,包括爬取的内容发生了变化。
-
第三,阿布云代理故障。
-
第四,爬虫错误。
-
**思考与完善:**其实在这一步,应该做好详细的error统计的,记录在数据库中,这个后期要完善起来。补充一下,形如此类:
# 文件 spider.py中
from scrapy.spidermiddlewares.httperror import HttpError
from twisted.internet.error import TimeoutError, TCPTimedOutError, DNSLookupError, ConnectionRefusedError
yield response.follow(
url=re.sub(r'page=\d+',f'page={page}',url,count=1),
meta={
'dont_redirect':True,'key'