scrapy间歇性响应为空/降速/缓存

2021-11-22 18:41:40 浏览数 (1)

使用 scrapy访问豆瓣的搜索接口时,莫名会出现response json数据为空的情况。 加上回调重新请求 (要设置dont_filter=True 防止被过滤), 还是会出现异常。 最后发现是请求速度过快导致的。

降速: 将其中的访问速度与下载速度调整一下,具体设置:

代码语言:javascript复制
#并发请求个数(越小越慢) 默认是16个
CONCURRENT_REQUESTS = 5

#下载延迟时间(越大请求越慢)
DOWNLOAD_DELAY = 3

而对于多个spider文件需要不同的请求策略,则可以在爬虫文件中配置单独的 custom_settings:

自动限速(AutoThrottle):

可参考文档:https://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/autothrottle.html?highlight=auto#autothrottle-algorithm 该扩展能根据Scrapy服务器及您爬取的网站的负载自动限制爬取速度。 更友好的对待网站,而不使用默认的下载延迟0。自动调整scrapy来优化下载速度。

代码语言:javascript复制
#默认False;为True表示启用AUTOTHROTTLE扩展
AUTOTHROTTLE_ENABLED = True

#默认3秒;初始下载延迟时间
AUTOTHROTTLE_START_DELAY = 1

#默认60秒;在高延迟情况下最大的下载延迟
AUTOTHROTTLE_MAX_DELAY = 3

httpscatch缓存: httpscatch 对HTTP请求和响应的缓存。 如果启用 HTTPCACHE_ENABLED 的话,它会缓存每个请求和对应的响应。

代码语言:javascript复制
HTTPCACHE_ENABLED = True
HTTPCACHE_EXPIRATION_SECS = 0
HTTPCACHE_DIR = 'httpcache'
HTTPCACHE_IGNORE_HTTP_CODES = []
HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

可参考文档:https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings

0 人点赞