Python爬虫基础之简单说一下scrapy的框架结构


Posted in Python onJune 26, 2021

scrapy 框架结构

思考

  • scrapy 为什么是框架而不是库?
  • scrapy是如何工作的?

项目结构

在开始爬取之前,必须创建一个新的Scrapy项目。进入您打算存储代码的目录中,运行下列命令:

注意:创建项目时,会在当前目录下新建爬虫项目的目录。

这些文件分别是:

  • scrapy.cfg:项目的配置文件
  • quotes/:该项目的python模块。之后您将在此加入代码
  • quotes/items.py:项目中的item文件
  • quotes/middlewares.py:爬虫中间件、下载中间件(处理请求体与响应体)
  • quotes/pipelines.py:项目中的pipelines文件
  • quotes/settings.py:项目的设置文件
  • quotes/spiders/:放置spider代码的目录

Scrapy原理图

Python爬虫基础之简单说一下scrapy的框架结构

各个组件的介绍

1.Engine。引擎,处理整个系统的数据流处理、触发事务,是整个框架的核心。

2.ltem。项目,它定义了爬取结果的数据结构,爬取的数据会被赋值成该ltem对象。

3.Scheduler。调度器,接受引擎发过来的请求并将其加入队列中,在引擎再次请求的时候将请求提供给引擎。

4.Downloader。下载器,下载网页内容,并将网页内容返回给蜘蛛。

5.Spiders。蜘蛛,其内定义了爬取的逻辑和网页的解析规则,它主要负责解析响应并生成提结果和新的请求。

6.Item Pipeline。项目管道,负责处理由蜘蛛从网页中抽取的项目,它的主要任务是清洗、验证和存储数据。

7.Downloader Middlewares。下载器中间件,位于引擎和下载器之间的钩子框架,主要处理引擎与下载器之间的请求及响应。

8.Spider Middlewares。蜘蛛中间件,位于引擎和蜘蛛之间的钩子框架,主要处理蜘蛛输入的响应和输出的结果及新的请求。

Python爬虫基础之简单说一下scrapy的框架结构

数据的流动

  • Scrapy Engine(引擎):负责Spider、ltemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
  • Scheduler(调度器):负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
  • Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,
  • Spider(爬虫)?负责处理所有Responses,从中分析提取数据,获取ltem字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),
  • ltem Pipeline(管道):负责处理Spider中获取到的ltem,并进行进行后期处理(详细分析、过滤、存储等)的地方.
  • Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。
  • Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

到此这篇关于Python爬虫基础之简单说一下scrapy的框架结构的文章就介绍到这了,更多相关scrapy的框架结构内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的MongoDB模块PyMongo操作方法集锦
Jan 05 Python
基于python元祖与字典与集合的粗浅认识
Aug 23 Python
Python单元测试实例详解
May 25 Python
python实现键盘控制鼠标移动
Nov 27 Python
Python八皇后问题解答过程详解
Jul 29 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
Oct 12 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
Jan 03 Python
通过python检测字符串的字母
Feb 18 Python
多个版本的python共存时使用pip的正确做法
Oct 26 Python
 python中的元类metaclass详情
May 30 Python
Python爬虫基础之初次使用scrapy爬虫实例
Python上下文管理器Content Manager
Jun 26 #Python
仅用几行Python代码就能复制她的U盘文件?
总结几个非常实用的Python库
Jun 26 #Python
手残删除python之后的补救方法
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Python Pandas模块实现数据的统计分析的方法
Jun 24 #Python
You might like
php中mysql模块部分功能的简单封装
2011/09/30 PHP
PHP递归算法的简单实例
2019/02/28 PHP
php测试kafka项目示例
2020/02/06 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
Stop SQL Server
2007/06/21 Javascript
javascript 闭包
2011/09/15 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
通过JavaScript下载文件到本地的方法(单文件)
2019/03/17 Javascript
vue实现购物车小案例
2019/09/27 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
Django验证码的生成与使用示例
2017/05/20 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
python批量解压zip文件的方法
2019/08/20 Python
Python简单实现区域生长方式
2020/01/16 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
美国最流行的男士时尚网站:Touch of Modern
2018/02/05 全球购物
2014年行政助理工作总结
2014/11/19 职场文书
旷工检讨书1000字
2015/01/01 职场文书