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

爬虫【Scrapy-redis分布式爬虫】

Scrapy-redis分布式爬虫

1.Scrapy-redis实现增量爬虫

增量爬虫的含义

就是前面所说的的暂停、恢复爬取

安装

# 使用scrapy-redis之前最好将scrapy版本保持在2.8.0版本, 因为2.11.0版本有兼容性问题
pip install scrapy==2.8.0
pip install scrapy-redis -i https://pypi.tuna.tsinghua.edu.cn/simple

配置 - 在setting.py中加入以下内容( 根据注释可选 )

"""
    scrapy-redis配置
"""
# 调度器类 基于redis
SCHEDULER = "scrapy_redis.scheduler.Scheduler"

# 指纹去重类
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 可以替换成布隆过滤器
# 下载 - pip install scrapy-redis-bloomfilter
# from scrapy_redis_bloomfilter.dupefilter import RFPDupeFilter
# DUPEFILTER_CLASS = 'scrapy_redis_bloomfilter.dupefilter.RFPDupeFilter'

# 是否在关闭时候保留原来的调度器和去重记录, True=保留, False=清空
SCHEDULER_PERSIST = True

# Redis 服务器地址
REDIS_URL = "redis://127.0.0.1:6379/0" # Redis默认有16库,/1的意思是使用序号为2的库,默认是0号库(这个可以任意)

SCHEDULER_QUEUE_KEY = "scrapy_redis:queue.PriorityQueue" # 使用有序集合来存储
# SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.FifoQueue" #  先进先出
# SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.LifoQueue" # 先进后出, 后进先出

# 配置Redis管道
# from scrapy_redis.pipelines import RedisPipeline
# ITEM_PIPELINES = {
   
#     "scrapy_redis.pipelines.RedisPipeline": 301,
#     "douban.pipelines.DoubanPipeline": 300,
# }

# 重爬:一般不配置,在分布式中使用重爬机制会导致数据混乱,默认是False
# SCHEDULER_FLUSH_ON_START = True

运行指令以及运行效果

scrapy crawl 爬虫名称

在爬取过程中,使用ctrl+c让爬虫暂停抓取。停止后使用redis客户端查看对应的数据信息

scrapy-redis的工作流程

spiders -> request请求对象 -> 经过中间件 -> 提交给引擎 -> 会把Request对象提交给调度器(下载器)
-> 返回response -> 给pipeline
-> 返回request -> 给引擎 交给调度器
基于redis的调度器

增量爬虫 - 案例1 - 网易招聘

# zhaopin.py
import scrapy
from scrapy.http import JsonRequest
from scrapy import cmdline

class ZhaopinSpider(scrapy.Spider):
    name = "zhaopin"
    allowed_domains = ["hr.163.com"]
    # start_urls = ["https://hr.163.com/api/hr163/position/queryPage"]

    def start_requests(self):
        api_url = "https://hr.163.com/api/hr163/position/queryPage"
        for page in range(1, 229):
            json_data = {
   
                "currentPage": page,
                "pageSize": 10,
            }
            yield JsonRequest(api_url, data=json_data)

    def parse(self, response, **kwargs):
        print(response.json()["data"][
http://www.dtcms.com/a/107058.html

相关文章:

  • SQL 转 PHP Eloquent、Doctrine ORM, 支持多数据库
  • [python] 正则表达式
  • Enovia许可类型及其区别
  • 蓝桥杯 web 知识点集合
  • ngx_sprintf
  • Nginx 核心配置详解与性能优化最佳实践
  • 栈 —— 数据结构基础刷题路程
  • Linux: 进程信号初识
  • 批量提取 PDF 文档中指定页为新的 PDF 文档
  • 【结肠AI分割论文合集1(2021~2023年份)】A survey1
  • 深入探索Redisson:用法全解析及在微服务中的关键应用
  • UCOS和RTOS的区别
  • 算法:双指针法--计算两数之和
  • 数据驱动的智能BMS革新:机器学习赋能电池健康预测与安全协同优化
  • 重新安装VMware tools为灰色无法点击问题解决|读取电脑文件的共享文件夹方法
  • 蓝桥杯刷题
  • 4月2号.
  • 代码随想录C++算法训练,二叉树(day18)
  • 辛格迪客户案例 | 盛大康成GMP质量合规数字化(QMS)项目
  • ros2--urdf--IMU
  • uperMap GIS基础产品FAQ集锦(20250402)
  • 「2025最新版React+Ant Design+Router+TailwindCss全栈攻略:从零到实战,打造高颜值企业级应用
  • [ 3分钟算法 ] | 递归搜索题目 : 合并两个有序链表(递归版)
  • C++虚继承及其它特性
  • 智谱发布AI Agent“AutoGLM沉思”,开启AI“边想边干”新时代
  • k8s之Ingress讲解
  • 定制化自己的 RAG 框架:结合 LlamaIndex 与自定义优化
  • c加加学习之day01
  • 解锁Azure Speech “通话转录音分析”功能,驶向服务升级高速路
  • 深度解析 Hive Reduce 数量配置:优化原则与计算公式实战指南