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

Python爬虫之Scrapy框架系列(23)——分布式爬虫scrapy_redis浅实战【XXTop250部分爬取】

目录:

  • 1.实战讲解(XXTop250完整信息的爬取):
    • 1.1 使用之前做的完整的XXTOP250项目,但是设置为只爬取一页(共25个电影),便于观察
    • 1.2 配置settings文件中使用scrapy_redis的必要配置,并使用公共redsi数据存储区域(通过使用特定管道实现)
    • 1.3 注意:上述settings.py配置中有个可选项SCHEDULER_PERSIST,作用是决定清理还是不清理redis队列:
    • 1.4 但是上面并不能在redis中看到每个请求URL的信息:
    • 1.5 实例实现断点续爬:

1.实战讲解(XXTop250完整信息的爬取):

  • 先用单独一个项目来使用scrapy_redis,讲解一些重要点!

1.1 使用之前做的完整的XXTOP250项目,但是设置为只爬取一页(共25个电影),便于观察

在这里插入图片描述

1.2 配置settings文件中使用scrapy_redis的必要配置,并使用公共redsi数据存储区域(通过使用特定管道实现)

# 第一步:加入以下代码:
#设置scrapy-redis
#1.启用调度将请求存储进redis
from scrapy_redis.scheduler import Scheduler
SCHEDULER="scrapy_redis.scheduler.Scheduler"#2.确保所有spider通过redis共享相同的重复过滤
from scrapy_redis.dupefilter import RFPDupeFilter
DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"#3.指定连接到Redis时要使用的主机和端口     目的是连接上redis数据库
REDIS_HOST="localhost"
REDIS_PORT=6379# 不清理redis队列,允许暂停/恢复抓取    (可选)    允许暂停,redis数据不丢失     可以实现断点续爬!!!
SCHEDULER_PERSIST = True# 第二步:开启将数据存储进redis公共区域的管道!
# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {# 'film.pipelines.FilmPipeline': 300,'scrapy_redis.pipelines.RedisPipeline': 100,# 'film.pipelines.DoubanSqlPipeline': 200,
}

1.3 注意:上述settings.py配置中有个可选项SCHEDULER_PERSIST,作用是决定清理还是不清理redis队列:

  • 首先,设置其值为True,允许断点续爬,通过Redis Desktop Manager观察redis中存储数据的公共区域:(会发现,其中有一个是Douban:duperfilter,里面放的是每个请求URL的指纹;一个是Douban:items,里面放的是最终爬取的数据!)

在这里插入图片描述在这里插入图片描述

但是,如果将可选项SCHEDULER_PERSIST的值设为False,不允许断点续爬,观察:(发现只有一个Douban:items,里面放的是最终爬取的数据!而没有每个请求URL的指纹数据!)

在这里插入图片描述

1.4 但是上面并不能在redis中看到每个请求URL的信息:

  • 这是因为每次执行完毕之后,redis中就不存在了,所以,为了观察到scrapy_redis是将每个请求都交给redis的,我们在运行项目一段时间后,强制关闭项目,再来观察redis,会发现:(其中包括了Douban:requests!!!)

在这里插入图片描述

1.5 实例实现断点续爬:

  • 首先,设置SCHEDULER_PERSIST为True,运行框架一会之后立马强制中断!

  • 注意,settings.py中开启存储本地txt数据的管道!
    在这里插入图片描述
    会发现,在本地存储的数据没有25条,这是因为断点续爬,接着之前中断的点继续爬取的:
    在这里插入图片描述

http://www.lryc.cn/news/95362.html

相关文章:

  • html基于onmouse事件让元素变颜色
  • Linux环境PostgreSQL安装
  • Rust 数据类型 之 结构体(Struct)
  • 数据结构之Queue的实现
  • rust声明式宏
  • 第二章:Learning Deep Features for Discriminative Localization ——学习用于判别定位的深度特征
  • 【CSS】box-shadow 属性
  • 基于深度学习的高精度课堂人脸检测系统(PyTorch+Pyside6+YOLOv5模型)
  • Mysql错误日志、通用查询日志、二进制日志和慢日志的介绍和查看
  • 【Linux】Tcp服务器的三种与客户端通信方法及守护进程化
  • 【Spring Cloud】git 仓库新的配置是如何刷新到各个微服务的原理步骤
  • 三,创建订单微服务消费者 第三章
  • 【雕爷学编程】Arduino动手做(87)---ULN2003步进电机模组2
  • 【C#】微软的Roslyn 是个啥?
  • 两个小封装电机驱动芯片:MLX813XX、A4950
  • 数据结构【绪论】
  • 掌握无人机遥感数据预处理的全链条理论与实践流程、典型农林植被性状的估算理论与实践方法、利用MATLAB进行编程实践(脚本与GUI开发)以及期刊论文插图制作等
  • Angular中组件设计需要注意什么?
  • 电容触摸屏(TP)的工艺结构
  • Qt小妙招:如何在可执行文件生成后,在pro文件中添加其他命令操作?
  • 做好防雷检测的意义和作用
  • 计算机启动过程uefi+gpt方式
  • 探索容器镜像安全管理之道
  • 【MySQL】内置函数
  • 使用arm-none-eabi-gcc编译器搭建STM32的Vscode开发环境
  • 图数据库Neo4j学习二——cypher基本语法
  • ChatGPT:人工智能交互的未来之光
  • 128最长连续数组
  • redis 1
  • vue+Element项目中v-for循环+表单验证