【Python Scrapy】详细介绍Scrapy的基本结构、组件和工作原理

您所在的位置:网站首页 框架的基本概念包括 【Python Scrapy】详细介绍Scrapy的基本结构、组件和工作原理

【Python Scrapy】详细介绍Scrapy的基本结构、组件和工作原理

2024-07-10 02:15| 来源: 网络整理| 查看: 265

Python爬虫框架Scrapy,是一个基于Python语言的开源项目,用于快速构建爬虫程序。它提供了一套完整的爬虫工具,支持异步网络请求、数据分析和处理、反爬虫机制等,是爬取数据的优秀工具之一。本文将以Scrapy的基本结构、组件和工作原理为主,对其进行详细介绍。 在这里插入图片描述

文章目录 一、Scrapy的基本结构二、Scrapy组件详解三、Scrapy工作原理四、总结

一、Scrapy的基本结构

Scrapy的基本结构包括:Scrapy Engine(引擎)、Scheduler(调度器)、Downloader(下载器)、Spider(蜘蛛)、Item Pipeline(项目管道)和Middleware(中间件)。下面将逐一介绍这些组件。

Scrapy Engine

Scrapy Engine是整个框架的核心,它协调各大组件间的工作,负责处理整个系统的数据流和控制流。它接收来自Spider的请求,将请求传递给Scheduler,并根据Scheduler预定的顺序获取下一个请求。当请求被调度时,它负责将请求发送给Downloader进行下载,并在请求成功后将响应传递给Spider进行解析。

Scheduler

Scheduler是负责处理Spider程序的调度器。它接收来自Spider的所有请求,并将它们存储在队列中。Scheduler将请求队列中的请求按照一定的预定顺序传递给Engine。

Downloader

Downloader是Scrapy的下载器,它负责下载抓取到的网页内容,并将响应传递给Engine或Spider进行解析。下载器得到请求后,会使用下载代理,设置请求头、Cookie等请求特征,然后发送请求到网站。它负责处理Cookies、重定向、处理超时等HTTP请求过程。

Spider

Spider是整个Scrapy的爬虫核心,它定义网站的解析方式,指定网站的起始点,并提供如何跟进网页中的链接的规则。 Spider还可以从页面提取felds,存入Item对象中,并将提取结果传送到Item Pipeline。

Item Pipeline

Item Pipeline是Scrapy的数据管道。它负责接收Spider传来的数据,对数据进行处理和清洗,并将数据持久化到数据库或写入文件中。Item Pipeline的每个组件都是一个类,类似管道中的一个节点,数据经过由上至下的每个节点的处理,直到最终保存数据。

Middleware

Scrapy中的中间件,其是Engine、Downloader和Spider中用于处理对请求和响应的处理插件。中间件分为Downloader中间件和Spider中间件两种类型。Downloader中间件是定义下载时的预处理和后处理。Spider中间件是在Spider返回的结果之前对结果进行预处理和后处理。

二、Scrapy组件详解 Spider

Spider是整个Scrapy的爬虫核心。它包含了一系列网站解析的规则、网页链接规则,定义了从起始点开始的爬取规则,决定哪些页面内容需要被抓取。Spider的主要作用是定义如何访问某个或某些页面、如何提取数据、以及如何遍历下一个链接。Scrapy默认提供了两个Spider类:BaseSpider和CrawlSpider。

BaseSpider是最基本的Spider形式,主要是从一个网址开始,根据爬虫的一些规则访问网址,提取数据。

CrawlSpider是集成功能更强大的Spider类,它不仅可以访问单独的网址,还可以跨越多个网址,也不仅仅爬取页面的源代码,还可以访问页面内嵌的JavaScript、CSS等等。

Item(数据项)

Item是Scrapy中的一个简单容器,用于保存从网页爬取下来的数据。它相当于一个字典,用于存储数据,其具有Python字典的所有性质。Item赋值方式类似于Python字典的键值对方式,由Scrapy提供的系统默认组件可以帮助开发者对从网页爬取下来的数据进行清洗和过滤,以达到快速定位所需数据的目的。

Pipeline(数据管道)

Pipeline是用于进行数据处理的组件,其需要自己在配置文件中定义。在Scrapy框架中,Pipeline功能十分丰富,可用于数据的存储、数据过滤、数据去重、数据转换、发送电子邮件等。统一处理数据,提高代码复用性和测试性,并降低系统中各模块的耦合度。

Pipeline组件同时封装了一片特定的处理,可以将爬取下来的数据按照一定的流程进行后续处理和分析。例如,可以将提取到的数据进行清洗过滤,规范化存储,或进行分析得到统计结果等。

Downloader(下载器)

Downloader是用于进行网页下载的组件,其可以将爬虫程序转化为具体的HTTP请求并发送到服务器,接收服务器的响应并对响应进行处理。它处理网页时,相当于是一个数据下载器,其负责发起HTTP请求并接收返回的数据,这些数据就包括网页的源代码、附加数据、图片等非文本数据等。

Middleware(中间件)

Middleware是Scrapy中的中间件处理组件,用于对下载器进行扩展。它可以与下载器和Spider进行交互,可以拦截、修改即将被发送到Engine的请求和响应,从而对链式处理中的各个点进行处理优化。

在Middle中,有很多内置的处理器,如DownloaderMiddleware、SpiderMiddleware、HTTPCacheMiddleware、CookiesMiddleware等,处理多种数据格式和数据交互方式。

三、Scrapy工作原理

在工作流程中,先通过Spider给出的起始网址生成初始的请求,将Request对像包装成Scrapy的HTTP Request请求的对像,然后将包含了请求URL的Request对象给到Scrapy的引擎(Engine)。

引擎,按照先进先出的顺序,递归处理生成Request,直到生成结果为空为止。

引擎将请求重定向到Scheduler调度程序的模块中。调度模块是Scrapy的核心,它对每个请求进行管理和调度,根据其优先级、是否重复、并发等特点安排请求的顺序。

调度程序执行后,将请求包装成下载器(Downloader)能够理解的请求。下载器根据请求生成一个HTTP请求发送给目标主机,请求返回下载器的是HTTP响应(Response)。

当下载器(Downloader)下载完目标网站的HTML文本文件之后,Scrapy将文本文件存储在内存中并使用HtmlDocument对象或BeautifulSoup或XPath解析器对数据进行解析。默认情况下,Scrapy将根据Spider的定义从HTTP响应页面中提取Item项,并通过其数据管道相应地存储或处理项。

Scrapy将此数据传递给引擎,然后由引擎将该数据驱动到相关的Item Pipeline(数据管道)中,进行数据验证、清洗和格式化。

Scrapy爬虫被实现为Python类,这个Python类继承了scrapy.Spider基类或相关的基类,实现了用户定义的爬虫逻辑。用户定义的类将包含Spiders类中定义的必须设置的方法,包括name属性、start_urls属性、parse方法等。

四、总结

Scrapy是一个功能强大的Python爬虫框架,提供了完备的爬取任务的工具集,同时也允许在需要的时候实现自定义组件,极大地提高了开发和维护的效率。掌握Scrapy并使用其组件进行爬虫开发,对于爬虫开发人员,是一门必不可少的技能。无论是对于爬虫性能的优化,还是对于数据的处理与管理,在Scrapy的丰富组件库中,都有非常成熟和专业的解决方案可以采用。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3