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

目录:

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

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

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

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

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

python 复制代码
# 第一步:加入以下代码:
#设置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条,这是因为断点续爬,接着之前中断的点继续爬取的:

相关推荐
红衣小蛇妖1 小时前
Python基础学习-Day23
开发语言·python·学习
Hello world.Joey2 小时前
数据挖掘入门-二手车交易价格预测
人工智能·python·数据挖掘·数据分析·conda·pandas
刘延林.2 小时前
树莓5安装 PyCharm 进行python脚本开发
ide·python·pycharm
小洛~·~2 小时前
多模态RAG与LlamaIndex——1.deepresearch调研
人工智能·python·深度学习·神经网络·chatgpt
q_q王3 小时前
‌FunASR‌阿里开源的语音识别工具
python·大模型·llm·语音识别
不学无术の码农3 小时前
《Effective Python》第1章 Pythonic 思维总结——编写优雅、高效的 Python 代码
开发语言·python
zhou1853 小时前
MySQL保姆级安装教程(附资源包+5分钟极速配置+环境变量调试技巧)
java·python·mysql·php
lczdyx4 小时前
PNG转ico图标(支持圆角矩形/方形+透明背景)Python脚本 - 随笔
图像处理·python
lgily-12254 小时前
常用的设计模式详解
java·后端·python·设计模式
陈苏同学5 小时前
MPC控制器从入门到进阶(小车动态避障变道仿真 - Python)
人工智能·python·机器学习·数学建模·机器人·自动驾驶