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

Scrapy框架介绍

一、什么是Scrapy

        是一款快速而强大的web爬虫框架,基于Twusted的异步处理框架

        Twisted是事件驱动的

        Scrapy是由Python实现的爬虫框架

                ① 架构清晰

                ②可扩展性强

                ③可以灵活完成需求

二、核心组件

  • Scrapy Engine(引擎):Scrapy框架的核心,负责控制整个系统的数据流和各个组件之间的通讯。它接收来自Spiders的请求,并发送给Scheduler(调度器),同时处理下载器返回的响应,再交给Spiders进行解析。
  • Spiders(爬虫):用户自定义的类,用于解析下载的页面内容并提取所需的数据,或者发送新的请求以进一步抓取数据。
  • Item Pipelines(项目管道):负责处理Spiders提取出来的数据,进行数据的清洗、验证和存储等后续操作。
  • Downloader(下载器):负责下载Scrapy Engine发送的所有请求,并将获取到的响应返回给Scrapy Engine。下载器是建立在Twisted这个高效的异步模型上的,能够处理大量的并发请求。
  • Scheduler(调度器):接受Scrapy Engine发送过来的请求,并按照一定的策略进行整理排列,然后将请求发送到Downloader。它相当于一个URL的优先队列,能够去除重复的URL。
  • Downloader Middlewares(下载器中间件):位于Scrapy Engine和Downloader之间,主要用于处理Scrapy Engine和Downloader之间的请求和响应。
  • Spider Middlewares(爬虫中间件):位于Scrapy Engine和Spiders之间,主要用于处理Spiders的输入(即响应)和输出(即请求)。

三、工作流程

  1. 初始请求:用户编写爬虫主程序,将需要下载的页面请求(Requests)递交给Scrapy Engine。
  2. 调度和去重:Scrapy Engine将请求转发给Scheduler,Scheduler按照一定的策略(如优先级和去重)将请求排列入队,并依次交给Downloader进行下载。
  3. 下载响应:Downloader下载页面并将生成的响应(Responses)返回给Scrapy Engine。
  4. 解析和提取:Scrapy Engine将响应转发给Spiders进行解析,Spiders提取出所需的数据(Items)或新的请求(Requests)。
  5. 数据处理:提取出的数据(Items)被发送到Item Pipelines进行后续处理,如清洗、验证和存储。
  6. 递归抓取:如果需要,Spiders可以发送新的请求以继续抓取数据,这个过程会重复进行,直到满足停止条件

四、特点与优势

  • 异步处理:Scrapy使用Twisted框架实现异步处理,能够显著提高数据抓取的效率和性能。
  • 扩展性强:Scrapy的架构清晰,模块之间的耦合程度低,用户可以通过编写自定义的Spiders、Item Pipelines和Middlewares来扩展Scrapy的功能。
  • 灵活性强:Scrapy支持多种数据导出格式,如JSON、CSV等,用户可以根据需要选择合适的数据导出方式。
  • 易于部署:Scrapy提供了丰富的命令行工具,使得项目的创建、运行和调试都变得非常简单和方便。

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

相关文章:

  • Facebook对现代社交互动的影响
  • Java项目运维有哪些内容?
  • 【学习笔记】MIPI
  • QMake 脚本知识点记录
  • Kubernetes配置管理(kubernetes)
  • macOS与Ubuntu虚拟机使用SSH文件互传
  • defineExpose 显式导出子组件方法
  • vue 解决列表界面进入明细返回查询条件不变
  • 华为NAT ALG技术的实现
  • 【移植】轻量系统STM32F407芯片移植案例
  • k8s 修炼手册
  • 重回1899元,小米这新机太猛了
  • jmeter本身常用性能优化方法
  • Vue3中el-table组件实现分页,多选以及回显
  • 柯桥韩语学校|韩语每日一词打卡:회갑연[회가변]【名词】花甲宴
  • python概述
  • 使用celery+Redis+flask-mail发送邮箱验证码
  • 【第十四章:Sentosa_DSML社区版-机器学习之时间序列】
  • Vue3.X + SpringBoot小程序 | AI大模型项目 | 饮食陪伴官
  • 【C++】检测TCP链接超时——时间轮组件设计
  • 中国新媒体联盟与中运律师事务所 建立战略合作伙伴关系
  • 【ArcGIS微课1000例】0121:面状数据共享边的修改方法
  • 图论(dfs系列) 9/27
  • 如何在Windows上安装Docker
  • golang格式化输入输出
  • Jenkins基于tag的构建
  • 性能设计模式
  • Android 热点分享二维码功能简单介绍
  • SIEM之王,能否克服创新者的窘境?
  • (JAVA)浅尝关于 “栈” 数据结构