scrapy-redis主从式简介
2019-08-15 15:51
176 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44220464/article/details/99626441
celery分布式任务队列
slaver(爬虫程序执行端)
几种爬虫分布式架构
- scrapy——redis,成熟的分布式框架,redis作为通讯载体读写迅速。
- RabbitMQ消息中间件 得益于确认机制,可以在高可靠性和高数据要求情景中,避免数据抓取的遗漏和丢失。
- 实现可以利用scrapy_redis调度执行
-
用于异步操作,如tornado ,django异步任务中,通过接口,打造爬虫框架,供他人使用
原生scrapy无法实现分布式原因:
- 原生的scrapy中的调度器不可以被共享
- 原生的scrapy的管道不可以被共享
scrapy_redis分类
- 主从分布式爬虫:
由一台master服务器, 来提供url的分发, 维护待抓取url的list。由多台slave服务器执行网页抓取功能, slave所抽取的新url,一律由master来处理解析,而slave之间不需要做任何通信。 - 对等分布式爬虫:
由多台相同的服务器集成,每台服务器可单独运作,完成爬虫工作,每台服务器之间的分工有一定的运算逻辑(ex: hash),由运算(配置)的结果,来决定由哪台服务器做抓取网页的工作。
常用的主从式实现分布式思路:
- 组成部分: Master端(核心服务器) 搭建redis,存储start_url,request,item,并使用redis指纹去重;持久化数据
-
爬虫程序,并将新的url加入到队列中
为何要用scrapy与redis
- scrapy scrapy将爬虫框架模块化,功能细化,有高拓展性,更易部署。
- 实时监控:使用item来实现对数据
- 高效率:twisted异步请求,downloader多线程下载
-redis - Request队列指纹去重,断点续爬,增量爬取
分布式充点在配置,配置的合理会简化我们的工作量。
# settings通用配置配置编码: USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' ROBOTSTXT_OBEY = False # 线程数,默认为16条,在我们需求和主机配置满足条件下酌情配置 CONCURRENT_REQUESTS = 16 # 管道,持久化数据 ITEM_PIPELINES = { # 'fbspro.pipelines.FbsproPipeline': 300, 'scrapy_redis.pipelines.RedisPipeline': 400 } # 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 使用scrapy-redis组件自己的调度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据 SCHEDULER_PERSIST = True # redis配置 REDIS_HOST = '192.168.12.198' REDIS_PORT = 6379
增加scrapy效率
-
增加并发:
默认scrapy开启的并发线程为32个,可以适当进行增加。在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100。 -
降低日志级别:
在运行scrapy时,会有大量日志信息的输出,为了减少CPU的使用率。可以设置log输出信息为INFO或者ERROR即可。在配置文件中编写:LOG_LEVEL = ‘INFO’ -
禁止cookie:
如果不是真的需要cookie,则在scrapy爬取数据时可以禁止cookie从而减少CPU的使用率,提升爬取效率。在配置文件中编写:COOKIES_ENABLED = False -
禁止重试:
对失败的HTTP进行重新请求(重试)会减慢爬取速度,因此可以禁止重试。在配置文件中编写:RETRY_ENABLED = False -
减少下载超时:
如果对一个非常慢的链接进行爬取,减少下载超时可以能让卡住的链接快速被放弃,从而提升效率。在配置文件中进行编写:DOWNLOAD_TIMEOUT = 10 超时时间为10s
参考:
https://www.geek-share.com/detail/2736187134.html
https://www.geek-share.com/detail/2713186297.html
相关文章推荐
- scrapy-redis功能简介
- 基于Scrapy_redis部署scrapy分布式爬虫
- redis 简介
- scrapy-redis(七):部署scrapy
- redis简介及安装(集群)
- scrapy-redis 关闭spider的问题
- Redis简介
- Redis 简介
- 【转】NoSQL初探之人人都爱Redis:(2)Redis API与常用数据类型简介
- redis入门简介
- Redis入门很简单之一【简介与环境搭建】
- scrapy-redis源码分析之发送POST请求详解
- linux下安装python、scrapy、redis、mysql
- Redis 简介 Windows版下载
- Redis简介-安装-入门
- Redis简介
- Centos下安装Redis步骤简介
- Redis——简介
- redis入门——redis简介
- Redis简介