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

news2025/4/3 6:51:28

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.coloradmin.cn/o/2327037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

intellij Idea 和 dataGrip下载和安装教程

亲测有效 第一步:卸载老版本idea/Datagrip (没有安装过的可跳过此步骤) 第二步:下载idea/dataGrip安装包 建议选择2022以后的版本 官网: https://www.jetbrains.com/datagrip/download/other.html 选择dataGrip 的…

轻量级搜索接口技术解析:快速实现关键词检索的Java/Python实践

Hi,你好! 轻量级搜索接口技术解析:快速实现关键词检索的Java/Python实践 接口特性与适用场景 本接口适用于需要快速集成搜索能力的开发场景,支持通过关键词获取结构化搜索结果。典型应用场景包括: 垂直领域信息检索…

架构设计基础系列:事件溯源模式浅析

图片来源网络,侵权删 ‌1. 引言‌ ‌1.1 研究背景‌ 传统CRUD模型的局限性:状态覆盖导致审计困难、无法追溯历史。分布式系统复杂性的提升:微服务架构下数据一致性、回滚与调试的需求激增。监管合规性要求:金融、医疗等领域对数…

【力扣hot100题】(035)二叉树的中序遍历

正常方法递归很简单,于是又学了一种栈的方法。 原理如下:每次循环先尽量将目前节点入栈并左移,没有左节点时回到栈首节点将目前节点放入结果容器中并移出栈外,目前节点变为该节点的右节点,循环结束条件是目前节点为nu…

《数字图像处理》教材寻找合作者

Rafael Gonzalez和Richard Woods所著的《数字图像处理》关于滤波器的部分几乎全错,完全从零开始写,困难重重。关于他的问题已经描述在《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》。 现寻找能够共同讨论、切磋、…

批量删除 txt/html/json/xml/csv 等文本文件中的重复行

在文本文件中,可能会存在一些重复的数据行,这可能不是我们期望的,因此我们会碰到需要删除文本文件中重复行的情况。如果是人工删除,当文件较大或者数量较多的时候,处理的难度会较大。今天就给大家介绍一下批量删除文本…

基于微信小程序的智慧乡村旅游服务平台【附源码】

基于微信小程序的智慧乡村旅游服务平台(源码L文说明文档) 目录 4系统设计 4.1系统功能设计 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 管理员模块的实现 5.1.1旅游景点管理…

80. Linux内核定时器实验

一、Linux内核定时器原理 1.1、内核时间管理 1、Cortex-M内核使用systick作为系统定时器。 2、硬件定时器、软件定时器,原理是依靠系统定时器来驱动。 3、linux内核频率可以配置,图形化界面配置。 4、重点,HZ表示系统节拍率, 1.…

C++类与对象(上):从入门到实践

目录 一、引言 二、面向过程和面向对象初步认识 2.1 面向过程编程 2.2 面向对象编程 三、类的引入 四、类的定义 4.1 定义格式 4.2 定义方式 4.3 成员变量命名规则建议 五、类的访问限定符及封装 5.1 访问限定符 5.2 封装 六、类的作用域 七、类的实例化 7.1 概念…

Lumerical ------ Edge coupler design

Lumerical ------ Edge coupler design 引言正文无 Si Substrate 的仿真步骤有 Si Substrate 的仿真步骤引言 本文,我们将使用官方提供的 Edge coupler 设计教程,但是中间会带有作者本人的设计的感悟。 正文 无 Si Substrate 的仿真步骤 打开 Edge_Coupler_No_Substrate.l…

大语言模型本质上还是自动化,而不是智能化

大语言模型本质上仍然是自动化或高级自动化,而非真正的智能化,原因可以从以下几个方面进行分析:1、自动化与智能化的本质区别自动化:大语言模型通过预训练和微调,基于大量数据和规则生成输出。它的行为是基于输入数据的…

python数据结构——链表、栈、队列

一、思维梳理: 二、双向循环链表: class Node:def __init__(self,data):self.data dataself.next Noneself.prev Noneclass DoubleLink:def __init__(self):self.size 0self.head Nonedef is_empty(self):return self.size 0def add_end(self,dat…

centos操作系统如何更换yum镜像源

CentOS Linux 是一个免费提供的、社区支持的Linux发行版,由CentOS项目社区贡献者开发、分发和维护。2020年CentOS项目宣布将把全部投资转移到CentOS Stream,作为即将发布的 Red Hat Enterprise Linux版本的上游开发平台。因此,CentOS Linux更新和发布将在2021年至2024年期间…

【Linux篇】自主Shell命令行解释器

📌 个人主页: 孙同学_ 🔧 文章专栏:Liunx 💡 关注我,分享经验,助你少走弯路! 文章目录 1. 获取用户名的接口2. 等待用户输入接口3. 将上述代码进行面向对象式的封装4. 命令行解析5.…

我的创作纪念日-一周年

目录 机缘 收获 日常 成就 憧憬 机缘 时光荏苒,转行计算机已经是第5个年头了。从Python入门,到C入土,兜兜转转,发现自己也只是初窥门径,习得皮毛。我从6年前开始潜水CSDN,学习各路大佬的技术经验&…

多线程代码案例 - 1

目录 单例模式 1. 饿汉模式 2. 懒汉模式 单例模式与多线程 问题1 问题2 问题3 完! 单例模式 单例模式是一种设计模式。 设计模式,是我们在编写代码时候的一种软性的规定,也就是说,我们遵守设计模式,代码的下限…

开发体育赛事直播系统主播认证功能技术实现方案

该体育直播系统系统由东莞梦幻网络科技开发&#xff0c;使用 ThinkPHP 作为后端&#xff0c;Vue.js 作为 PC/H5 端框架&#xff0c;Java 和 Objective-C 分别用于安卓和 iOS 开发。 1、前端实现 (Vue.js) <template><div class"anchor-certification">…

国产三维CAD「皇冠CAD」在汽车零部件领域建模教程:刹车片

本教程深度融合三维皇冠CAD&#xff08;CrownCAD&#xff09;的MBD&#xff08;Model-Based Definition&#xff09;设计理念&#xff0c;通过参数化建模、智能约束管理、动态装配验证等功能&#xff0c;实现数据驱动设计&#xff0c;精准解决了汽车制动系统中精密制动组件的设…

SpringMvc获取请求数据

基本参数 RequestMapping("save5") ResponseBody public User save5(String name, int age) {User user new User();user.setName(name);user.setAge(age);return user; } 在url中将name与age进行编写&#xff0c;通过框架可以提取url中的name与age&#xff0c;这…

大语言模型开发框架——LangChain

什么是LangChain LangChain是一个开发由语言模型驱动的应用程序的框架&#xff0c;它提供了一套工具、组件和接口&#xff0c;可以简化构建高级语言模型应用程序的过程。利用LangChain可以使应用程序具备两个能力&#xff1a; 上下文感知 将语言模型与上下文&#xff08;提示…