Scrapy功能非常强大,爬取效率高,相关扩展组件多,可配置和可扩展晨读非常高,它几乎可以应对所有反爬网站,是目前Python中使用最广泛的爬虫框架。Scrapy是一个基于Twisted的异步处理框架,是纯Python实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。我们只需要定制开发几个模块就可以轻松实现一个爬虫。

1.架构介绍

我们先了解一下Scrapy框架的机构,如下图所示

它可以分为如下的几个部分:

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

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

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

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

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

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

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

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

2.数据流

Scrapy中的数据流由引擎控制,数据流的过程如下。

(1)Engine首先打开一个网站,找到处理该网站的Spider,并向该Spider请求第一个要爬去的URL。

(2)Engine从Spider中获得到第一个爬取的URL,并通过Scheduler以Request的形式调度。

(3)Engine向Scheduler请求下一个要爬取的URL。

(4)Scheduler返回下一个要爬取的URL给Engine,Engine将URL通过Downloader Middlewares转发给Downloader下载。

(5)一旦页面下载完毕,Downloader生成该页面的Response,并将其通过Downloader Middlewares发送给Engine。

(6)Engine从下载器中接收到Response,并将其通过Spider Middlewares发送给Spider处理。

(7)Spider处理Response,并返回爬取到的Item及新的Request给Engine。

(8)Engine将Spider返回的Item给Item Pipeline,将新的Request给Scheduler。

(9)重复第(2)步到第(8)步,直到Scheduler中没有更多的Request,Engine关闭该网站,爬取结束。

通过多个组件的相互协作、不同组件完成工作的不同、组件对异步处理的支持,Scrapy最大限度地利用了网络宽带,大大提高了数据爬取和处理的效率。

3.项目结构

Scrapy框架和Pyspider不同,它是通过命令行来创建项目的,代码的编写还是需要IDE。项目创建后,项目文件结构如下所示:

scrapy.cfgproject/__init__.pyitems.pypipelines.pysettings.pymiddlewares.pyspiders/__init__.pyspider1.pyspider2.py...

这里各个文件的功能描述如下。

scrapy.cfg:它是Scrapy项目的配置文件,其内定义了项目的配置文件路径、部署相关信息等内容。

items.py:它定义Item数据结构,所有的Item的定义都可以放这里。

pipelines.py:它定义Item Pipeline的实现,所有的Item Pipeline的实现都可以放在这里。

settings.py:它定义项目的全局配置。

middlewares.py:它定义Spider Middlewares和Downloader Middlewares的实现。

Spiders:其内包含一个个Spider的实现,每个Spider都有一个文件。

最后,本文介绍了Scrapy框架的基本结构、数据流过程以及项目结构,后面讲详细的了解Scrapy的用法,感受其功能的强大之处。

爬虫框架Scrapy框架的介绍 一看就明白相关推荐

  1. Python爬虫之scrapy框架360全网图片爬取

    Python爬虫之scrapy框架360全网图片爬取 在这里先祝贺大家程序员节快乐,在此我也有一个好消息送给大家,本人已开通了微信公众号,我会把资源放在公众号上,还请大家小手动一动,关注过微信公众号, ...

  2. Python爬虫之Scrapy框架爬虫实战

    Python爬虫中Scrapy框架应用非常广泛,经常被人用于属于挖掘.检测以及自动化测试类项目,为啥说Scrapy框架作为半成品我们又该如何利用好呢 ?下面的实战案例值得大家看看. 目录: 1.Scr ...

  3. Python学习笔记——爬虫之Scrapy框架

    目录 Scrapy 框架 Scrapy的安装介绍 Windows 安装方式 Ubuntu 需要9.10或以上版本安装方式 入门案例 启动Scrapy Shell Item Pipeline Spide ...

  4. Python3爬虫之Scrapy框架的下载器中间件

    Python爬虫之Scrapy框架的下载器中间件 基本介绍 下载器中间键可以为我们设置多个代理ip与请求头,达到反反爬虫的目的 下面是scrapy为我们创建好的中间件的类 下面是中间件中的下载器函数, ...

  5. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  6. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...

  7. 19. python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...

  8. python爬虫——用Scrapy框架爬取阳光电影的所有电影

    python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...

  9. 爬虫之Scrapy框架爬取彼岸壁纸案例分享

    爬虫之Scrapy框架爬取彼岸壁纸案例分享 前段时间在网上看到有人爬取了彼岸壁纸的案例,由于爬取的图片较多,爬取速度感觉不快,所以就自己写了个Scrapy框架,个人觉得爬取速度快多了. 代码如下. 文 ...

  10. 14. python爬虫——基于scrapy框架爬取糗事百科上的段子内容

    python爬虫--基于scrapy框架爬取糗事百科上的段子内容 1.需求 2.分析及实现 3.实现效果 4.进行持久化存储 (1)基于终端指令 (2)基于管道 [前置知识]python爬虫--scr ...

最新文章

  1. jquery autocomplete demo
  2. 网络设置计算机,怎么重置电脑网络设置
  3. 比较两个字符串是否相等
  4. 《黑客与画家》读后感:你对技术一无所知(一些金句)
  5. linux echo命令的-n、-e两个参数
  6. 事件 ID 6008问题
  7. FB/IB多代事务结构详解--对FB事务最好的讲解
  8. 天翼云从业认证课后习题(第一章和第二章)
  9. WebService C#开发/调用
  10. LeetCode 1124. 表现良好的最长时间段(单调栈/哈希)
  11. [codevs1262] 不要把球传我 数论+组合数学
  12. linux c普通用户怎么判断键盘是否按动_网络没问题,电脑却无法联网怎么办?win10无法联网搞定方式举例...
  13. RDD和DataFrame和Dataset比较
  14. Python3数据结构总结(列表list,元组tuple,集合set,字典dict,堆栈stack,队列queue和遍历技巧)
  15. 第二节:使用IDEA创建React APP 并启动
  16. selenium IDE Chrome下载安装与使用
  17. linux+usb串口驱动安装ch341ser,U7编程器USB转串口驱动程序CH341SER
  18. (二)动态白盒测试(含逻辑覆盖例子)
  19. 介绍5款非常棒的移动自动化测试工具
  20. 哈希的结构-MD系列

热门文章

  1. HTML换行 元素之间产生空格
  2. oracle数据库创建新用户
  3. oppo手机语音转文字其实很简单,学会这个方法,一分钟搞定课堂笔记
  4. 使用js动态改变input的只读属性
  5. signature verification failed csb502报错
  6. java 统计网站访问量_javaweb之统计网站访问量小案例
  7. java如何统计系统浏览人数_java网站如何统计访问量和在线人数实例源码
  8. 如何把极坐标化为直角坐标_直角坐标怎么化极坐标
  9. Android 学习笔记 Contacts (二)Contacts 联系人详解
  10. 【ChatGPT提问技巧案例】之影视分镜头脚本撰写