当前位置: 首页 > news >正文

Scrapy 分布式爬虫框架 Scrapy-Redis

github官网代码示例:https://github.com/rmax/scrapy-redis/blob/master/example-project/example/spiders/myspider_redis.py

什么是 Scrapy-Redis

Scrapy-Redis 是一个基于 Scrapy 的扩展,用于实现分布式爬虫。它利用 Redis 作为分布式队列来共享待爬取的 URL 和去重数据,这样可以让多个爬虫实例(即多个爬虫节点)并行工作,从而实现大规模的分布式数据抓取。

把普通爬虫改造成分布式爬虫

使用普通爬虫,改造成分布式爬虫,更便于理解

1. 安装 scrapy_redis框架模块

pip install scrapy_redis

2. 爬虫类修改如下:

import scrapy
# --- 1. 导入分布式爬虫类
from scrapy_redis.spiders import RedisSpider# --- 2. 继承分布式爬虫类
class BaiduSpider(RedisSpider):name = "baidu"# --- 3. 注释原来普通爬虫的 allowed_domains,start_urls# allowed_domains = ["baidu.com"]# start_urls = ["https://www.baidu.com"]# --- 4. 设置redis的key,起始url就存在这个key里redis_key = "baidu"# --- 5. 设置 __init__,固定写法如下def __init__(self, *args, **kwargs):domain = kwargs.pop('domain', '')self.allowed_domains = list(filter(None, domain.split(',')))  # 获取启动爬虫命令时输入的域名super().__init__(*args, **kwargs)def parse(self, response):print("解析数据:", response.xpath('//title/text()').get())

3. 配置 settings.py 文件

# myproject2 是项目名称
SPIDER_MODULES = ["myproject2.spiders"]
NEWSPIDER_MODULE = "myproject2.spiders"# USER_AGENT = "scrapy-redis (+https://github.com/rolando/scrapy-redis)"
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"# 重复过滤器使用的模块
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 设置调度器,scrapy_redis中的调度器具备与数据库交互的功能
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 保持任务队列,当程序结束时不清空 Redis 中的队列
SCHEDULER_PERSIST = True# 设置任务队列使用的类型,可选的类型有:
# SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"  # 基于优先级的队列
# SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"          # 基于 FIFO 的队列
# SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"          # 基于 LIFO 的队列ITEM_PIPELINES = {# "myproject2.pipelines.ExamplePipeline": 300,"scrapy_redis.pipelines.RedisPipeline": 400,
}# 配置 redis 连接信息
REDIS_HOST = "localhost"
REDIS_PORT = 6379
# REDIS_DB = 0
# REDIS_PASSWORD = "123456"LOG_LEVEL = "DEBUG"# Introduce an artifical delay to make use of parallelism. to speed up the
# crawl.
# 延迟时间,单位秒
DOWNLOAD_DELAY = 1

4. 启动分布式爬虫

在爬虫类所在目录打开多个命令行窗口,使用如下命令启动爬虫

# scrapy runspider 爬虫类
scrapy runspider baidu.py

如下:表示启动了多个程序,一起用于对这个爬虫进行爬取

5. 向redis中添加爬取的url

向redis中添加爬取的url,启动的爬虫会从redis中读取url进行爬取

# lpush key value1 value2 value3
lpush baidu "https://www.baidu.com"

6. 效果

向 redis 中存入多个url后,可以看到有多个窗口同时爬取不同url的数据

lpush baidu "https://www.baidu.com" "https://tieba.baidu.com/f?kw=沙井"

实际使用场景

当一个网站的数据特别多的时候,有很多分页,或者下拉分页。通过对分页比较找出分页规则,通过分页规则计算拿到所有的分页地址。把所有的分页地址存到 redis 中

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 手撕顺序表
  • 无需多部备用机,云手机方便又便宜!
  • gptk是什么意思?Mac电脑如何在crossover里安装gptk2.0测试版?借助GPTK玩《原神》《黑神话悟空》游戏
  • 【算法】深入浅出聚类算法:原理、应用与Java实现
  • Spring Boot实战:通过Spring Cloud Sentinel实现流量控制
  • 代码随想录 刷题记录-17 贪心算法(2)习题
  • Unity--AnimationCurve动画曲线设置
  • 创建vue项目
  • 深入理解 Go 语言并发编程之系统调用底层原理
  • IP子网划分之网络工程师软考中级
  • 分子属性梯度引导的3D分子生成扩散模型 TAGMOL - 评测
  • 【celery-2】python-Django发送邮件-短信-钉钉通知
  • 软件架构设计——关联对象
  • 【初阶数据结构】顺序表和链表算法题(上)
  • Python和MATLAB及R平均意见得分导图
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Hibernate【inverse和cascade属性】知识要点
  • python docx文档转html页面
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • spring学习第二天
  • Theano - 导数
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 编写高质量JavaScript代码之并发
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 入门级的git使用指北
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • (70min)字节暑假实习二面(已挂)
  • (二)hibernate配置管理
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (转) Face-Resources
  • (转)3D模板阴影原理
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET C# 配置 Options
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET HttpWebRequest、WebClient、HttpClient
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET分布式缓存Memcached从入门到实战
  • .NET企业级应用架构设计系列之技术选型
  • .sdf和.msp文件读取
  • @Autowired和@Resource的区别
  • @EnableConfigurationProperties注解使用
  • @property @synthesize @dynamic 及相关属性作用探究
  • @property括号内属性讲解
  • [ C++ ] STL_list 使用及其模拟实现
  • [1]从概念到实践:电商智能助手在AI Agent技术驱动下的落地实战案例深度剖析(AI Agent技术打造个性化、智能化的用户助手)
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [CLickhouse] 学习小计