Scrapy与分布式开发(3):Scrapy核心组件与运行机制

Scrapy核心组件与运行机制

引言

这一章开始讲解Scrapy核心组件的功能与作用,通过流程图了解整体的运行机制,然后了解它的安装与项目创建,为后续实战做好准备。

Scrapy定义

Scrapy是一个为了爬取网站数据、提取结构性数据而编写的应用框架。它使用Python语言编写,并基于异步网络框架Twisted来实现高性能的爬虫。Scrapy最初是为了页面抓取(更确切地说是网络抓取)而设计的,但它也可以用于获取API返回的数据或通用的网络爬虫。

体系结构图

在这里插入图片描述

Scrapy核心组件

Scrapy框架主要由以下几个核心组件构成:

  • 引擎(Engine):Scrapy的引擎负责控制数据流在系统中所有组件之间的流动。它接收请求并将其分派给调度器,同时也接收来自下载器的响应并将其分派给相应的Spider进行处理。
  • 调度器(Scheduler):调度器负责接收请求并将其加入队列中,以便在引擎空闲时按一定的顺序分派给下载器。Scrapy默认使用优先级队列来实现调度器。
  • 下载器(Downloader):下载器负责获取网页内容。当引擎将请求分派给下载器时,下载器会向目标网站发起请求,并将获取到的响应返回给引擎。
  • Spider:Spider是Scrapy框架中的核心组件之一,负责处理网页内容并提取结构化数据。每个Spider都需要定义一个或多个解析方法,用于从响应中提取数据。
  • 项目管道(Item Pipeline):项目管道负责处理Spider提取的数据。你可以在管道中定义一系列的数据处理步骤,如数据清洗、数据验证和数据持久化等。
  • 中间件(Middlewares):中间件是Scrapy框架中的一个重要概念,它允许你在请求和响应的处理过程中插入自定义的逻辑。Scrapy提供了下载器中间件和Spider中间件,分别用于处理下载过程中的请求和响应,以及Spider处理过程中的请求和响应。

Scrapy组件之间的交互过程深度解析

Scrapy的各个组件之间的交互过程就像是一个协同工作的流水线,每个组件都有自己特定的任务,并且它们通过消息传递进行交互,确保数据的流畅传递和处理。

  1. 起始阶段:Spider与引擎的交互

    • Spider:首先,Spider会将自己感兴趣的URL或URL模式告知引擎。这是整个流程的起点。
    • 引擎:引擎接收到Spider提供的URL后,将其封装成一个请求(Request)对象。
  2. 调度阶段:引擎与调度器的交互

    • 引擎:引擎将封装好的请求对象传递给调度器。
    • 调度器:调度器会检查这个请求是否已经被处理过(去重),如果没有,则将其放入待处理队列中。
  3. 下载阶段:引擎与下载器的交互

    • 引擎:引擎从调度器队列中取出一个请求,并交给下载器。
    • 下载器:下载器根据请求中的URL,发送HTTP请求到目标网站,并下载网页内容。
  4. 解析阶段:引擎与爬虫的交互

    • 下载器:下载完成后,下载器将下载的网页内容(即响应对象,Response)返回给引擎。
    • 引擎:引擎将响应对象交给爬虫进行解析。
    • 爬虫:爬虫根据预设的规则,解析响应对象,提取出需要的数据,并可能生成新的请求(比如点击链接、进行分页等)。
  5. 数据处理阶段:引擎与项目管道的交互

    • 爬虫:爬虫将解析得到的数据和新的请求返回给引擎。
    • 引擎:引擎将解析得到的数据交给项目管道进行进一步的处理,如清洗、验证和存储。
    • 项目管道:项目管道处理完数据后,可以选择将其存储到数据库、文件或其他存储介质中。
  6. 循环与结束

    • 引擎:对于爬虫生成的新请求,引擎会重复上述流程(从调度阶段开始),直到调度器中没有更多的请求,或者达到了某种终止条件(如达到设定的爬取数量、时间等)。
    • 结束:当所有请求都处理完毕,且没有新的请求生成时,整个Scrapy流程结束。

在这个过程中,每个组件都扮演着特定的角色,并通过消息传递进行交互。这种协同工作的模式使得Scrapy能够高效地爬取和处理网页数据。同时,Scrapy还提供了丰富的中间件机制,允许用户自定义和扩展各个组件之间的交互过程,以满足更复杂的爬取需求。

Scrapy安装与项目创建

Scrapy的安装

首先,确保你的Python版本是3.6或以上,因为Scrapy需要Python 3.6+。你可以使用以下命令来安装Scrapy:

pip install scrapy

如果你想卸载Scrapy,可以使用以下命令:

pip uninstall scrapy

如果你需要安装特定版本的Scrapy(例如2.6.1版本),可以使用以下命令:

pip install scrapy==2.6.1

安装完成后,你可以通过以下命令来检查Scrapy是否成功安装:

pip list

在列表中,你应该能看到Scrapy及其版本号。

创建Scrapy项目

安装完Scrapy后,你可以开始创建一个新的Scrapy项目。打开终端或命令行,然后导航到你想要创建项目的目录,并使用以下命令来创建一个新的Scrapy项目:

scrapy startproject myproject

这里的myproject是你的项目名称,你可以根据自己的需要来命名。执行上述命令后,Scrapy会在当前目录下创建一个名为myproject的新文件夹,其中包含了一些基本的文件和目录结构。

接下来,你可以在myproject目录下创建一个新的爬虫。使用以下命令来生成一个新的爬虫文件:

cd myproject
scrapy genspider myspider example.com

这里的myspider是你的爬虫名称,example.com是你要爬取的网站域名。执行上述命令后,Scrapy会在myproject/spiders目录下创建一个名为myspider.py的新文件,其中包含了一个基本的爬虫框架。

演示流程图

注意,安装scrapy需要进入python环境,如果大家是使用Anaconda安装的python环境,需要进去指定的环境才能进行下面操作,实际上我们直接在pycharm中进行即可

进入指定环境和目录,输入scrapy验证已安装scrapy
在这里插入图片描述

创建项目coreSpider,命令是scrapy startproject coreSpider
在这里插入图片描述

进入新创建好的coreSpider目录,先拿百度为例创建爬虫脚本
在这里插入图片描述

再使用pycharm打开新创建好的项目即可
在这里插入图片描述

项目构成

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/511733.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云天励飞战略投资神州云海,布局机器人市场

日前,AI上市企业云天励飞(688343.SH)完成了对深圳市神州云海智能科技有限公司(以下简称“神州云海”)的B轮战略投资。 公开资料显示,自2015年于深圳创立以来,神州云海始终聚焦人工智能与服务机器人广阔的应用市场,依托自主的核心算法能力,深耕机器人硬件本体研发,整合上下游产…

基于Golang客户端实现Nacos服务注册发现和配置管理

基于Golang客户端实现Nacos服务注册发现和配置管理 背景 最近需要把Golang实现的一个web项目集成到基于Spring Cloud Alibaba的微服务体系中,走Spring Cloud Gateway网关路由实现统一的鉴权入口。 软件版本 组件名称组件版本Nacos2.2.0Go1.21.0Ginv1.9.1Nacos-s…

蓝桥杯备赛 day1 | 1. 门牌制作, 2. 迷宫, 3. 乘积尾零

最近正好在刷算法题&#xff0c;报了一个蓝桥杯体验一下&#xff0c;但是钱都交了&#xff0c;高低混个奖好吧&#xff0c;今天做的都是一些填空推理题&#xff0c;相当于用程序写下正解&#xff0c;代码是在Dev C上面写的 #include<iostream> #include<bits/stdc.h&g…

Java 小项目开发日记 06(Vue3 前端开发)

Java 小项目开发日记 06&#xff08;Vue3 前端开发&#xff09; 一、环境准备 1.1 创建vue工程(big-event-admin) npm init vuelatestcd big-event-admin npm install1.2 安装插件 1. 安装element-plus cnpm i element-plus --save2. 安装axios cnpm i axios3. 安装sass依赖…

重学SpringBoot3-yaml文件配置

重学SpringBoot3-yaml文件配置 引言YAML 基本语法YAML 数据类型YAML 对象YAML 数组复合结构标量引用 YAML 文件结构Spring Boot 中的 YAML 配置注意事项总结参考 引言 YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种常用于配置文件的数据序列化格式&#xff…

STM32(16)使用串口向电脑发送数据

发送字节 发送数组 发送字符和字符串 字符&#xff1a; 字符串&#xff1a; 字符串在电脑中以字符数组的形式存储

智元兔AI-免费论文写作神器

还在为写论文焦虑&#xff1f;免费AI写作大师来帮你三步搞定&#xff01; 智元兔AI是ChatGPT的人工智能助手&#xff0c;并且具有出色的论文写作能力。它能够根据用户提供的题目或要求&#xff0c;自动生成高质量的论文。 不论是论文、毕业论文、散文、科普文章、新闻稿件&…

分享一套高质量武器模型!免费速取!

继续分享一波 CC0 优质游戏资源&#xff0c;有喜欢的欢迎到Cocos Store上自取&#xff01; 01 低模手维武器模型 资源特点 FBX模型14个模型预制体14个模型面数&#xff1a;200~550资源包含 Cocos Creator 展示场景 资产种类 武器 10 个盾牌 4 个 下载地址&#xff1a;https://s…

【数据库】SQLite的基本指令、数据约束、联结表、触发器及索引的使用技巧

目录 一、SQLite 语句基础 1、创建表&#xff1a;create 语句 2、创建表&#xff1a;create 语句 (设置主键&#xff09; ​编辑 3、查看表 4、修改表&#xff1a;alter 5、删除表&#xff1a;drop table 语句 6、插入新行&#xff1a;insert into 语句--全部赋值 7、…

全局渐变滚动条样式

效果如下&#xff1a; APP.vue<style> /* 整个滚动条 */ ::-webkit-scrollbar {width: 5px;height: 10px; } /* 滚动条上的滚动滑块 */ ::-webkit-scrollbar-thumb {background-color: #49b1f5;/* 关键代码 */background-image: -webkit-linear-gradient(45deg,rgba(255,…

Neo4J

1.重装Neo4J出现的一些问题。 解决方案&#xff1a;直接将隐藏文件.Neo4JDesktop文件夹全部删除即可。 2.Neo4J Desktop的一些介绍 3.如何新建项目 参见&#xff1a; 【Neo4j Desktop】自存&#xff5c;Windows安装PythonJupyter notebook_nep4j链接jupyter-CSDN博客 图数据…

【编程学习】数组转矩阵

一、题目&#xff1a; 给定一个一维数组&#xff0c;要求是将数组转化成一个矩阵。数组的输入作为矩阵的第一列&#xff0c;之后每一列的数值&#xff0c;都要比上一列下移一行。 举例 输入&#xff1a; [1,2,3,4,5,6,7,8,9,10] 输出&#xff1a; 1 10 9 8 7 6 5 4 3 2 2 …