首页 > 其他分享 >爬虫工作量由小到大的思维转变---<第五十一章 Scrapy 深入理解Scrapy爬虫引擎(2)--引擎的工作流程>

爬虫工作量由小到大的思维转变---<第五十一章 Scrapy 深入理解Scrapy爬虫引擎(2)--引擎的工作流程>

时间:2024-03-23 22:58:37浏览次数:37  
标签:Pipeline 请求 处理 爬虫 Item Scrapy 引擎

前言:

继续上一篇:https://hsnd-91.blog.csdn.net/article/details/136943552

        本章主要介绍Scrapy引擎的启动流程、请求处理的生命周期、如何处理下载的内容以及触发Item Pipeline的过程。还讨论了数据处理在爬虫解析函数和Item Pipeline中的作用,并介绍了引擎关闭的流程及案例代码。

正文:

1、Scrapy引擎的启动流程:

1.1 加载配置:

        在启动Scrapy引擎之前,需要先加载并解析配置文件。配置文件中包含了爬虫的相关配置信息,如爬取目标、下载中间件、管道等。通过读取配置文件,引擎可以根据项目需求进行合理的配置。

1.2 组件初始化:

        在加载配置完成后,引擎会根据配置中指定的组件进行初始化。这些组件包括调度器、下载器、爬虫中间件和下载中间件等。通过初始化这些组件,引擎为后续的请求处理和数据处理做好准备。

1.3 调度器启动:

        调度器是Scrapy引擎的核心组件,负责管理待请求和待处理的URL队列。在引擎启动时,调度器会被启动,并从起始URL开始生成第一个请求。调度器根据设定的调度策略进行URL的调度和去重,确保爬取任务的顺利进行。

1.4 请求处理循环:

        在调度器启动后,引擎进入请求处理循环。循环的每一轮称为一个"请求处理周期"。在每个请求处理周期中,引擎会执行以下几个主要步骤:从调度器获取一个待处理的请求,将请求交给下载器处理,接收下载器返回的响应,将响应交给爬虫的解析函数进行数据提取和处理。这个循环会一直执行,直到所有的请求都被处理完成。

1.5 引擎关闭:

        当所有的请求处理完成后,引擎会触发关闭信号,通知爬虫任务即将结束。此时,可以执行一些清理操作或保存数据的逻辑。引擎的关闭流程会在后续的章节中详细介绍。

2.  请求处理的生命周期:

请求处理的生命周期是指一个请求从创建到完成整个处理过程的一系列环节。以下是请求处理的生命周期中的关键步骤:

2.1请求生成:

        在请求处理的开始阶段,引擎会将起始URL转化为一个请求对象。请求对象包含了URL、请求方法、请求头等信息。通过调用爬虫的起始请求生成函数,可以生成多个初始请求对象。

2.2下载器中间件的处理:

        在请求对象生成后,请求会依次经过下载器中间件的处理过程。下载器中间件可以对请求进行预处理重新构造请求或对请求进行过滤。通过下载器中间件,可以实现更加灵活和定制化的请求处理逻辑。

2.3调度器的调度和去重:

        经过下载器中间件的处理后,请求对象会被交给调度器进行调度。调度器会根据设定的调度策略对请求进行优先级调度和去重判断。调度器将请求对象添加到待调度队列中,并进行去重判断,以确保不发送重复的请求。

2.4下载器的处理:

        当调度器选择一个请求对象进行处理时,引擎会将请求对象交给下载器组件执行实际的下载动作。下载器根据请求对象中的URL、请求头等信息,发送网络请求获取响应内容。

2.5下载器中间件的处理:

        下载器接收到响应后,响应会经过下载器中间件的处理。下载器中间件可以对响应进行预处理、重新构造响应或对响应进行过滤。通过下载器中间件,可以进行响应内容的加工和处理。

2.6爬虫的解析和数据处理:

        下载器中间件处理完响应后,引擎会将响应对象交给指定的爬虫解析函数进行数据提取和处理。爬虫解析函数通过使用XPath、CSS选择器等方式,从响应内容中提取所需数据,并生成爬取结果。

2.7Item Pipeline处理:

        在爬虫解析函数中生成的数据项(Item)会经过Item Pipeline的处理。Item Pipeline可以对数据进行清洗、验证、处理或保存操作。通过Item Pipeline,可以对数据进行多种处理并将其保存到不同的存储介质中。

2.8保存数据:

        在引擎关闭之前,可以通过Item Pipeline将最终的爬取结果保存到目标存储介质中。这可以包括将数据存储到数据库、文件或其他数据源中。

2.9执行清理操作:

        引擎关闭时,可以执行一些额外的清理操作。例如关闭数据库连接、释放文件句柄或清除缓存数据等。这些操作有助于释放系统资源并保持环境的整洁。

2.10发送关闭信号:

        当所有的清理操作完成后,引擎会发送关闭信号通知爬虫任务即将结束。这可以触发相关代码的执行,以处理关闭前的最后任务。

2.11引擎关闭:

        最后,引擎会正式关闭,释放所有的资源和关闭相应的组件。引擎的关闭标志着整个爬虫任务的结束。

3.处理下载的内容:

        在Scrapy框架中,下载器负责发送网络请求并获取响应内容。当下载器接收到响应后,它会将下载的内容返回给引擎,然后引擎将根据配置和规则决定如何处理下载的内容。

3.1 下载的内容格式:

        下载的内容通常是以字节流(bytes)的形式返回的,这是响应的原始数据。内容可以是HTML页面、JSON数据、图片文件或其他任意形式的数据。

3.2 解析下载的内容:

        引擎从下载器接收到内容后,会将其交给相应的爬虫解析函数进行解析。解析函数可以使用XPath、CSS选择器或正则表达式等方式从内容中提取出所需的数据。

3.3 构建Item对象:

        在解析过程中,通常会将提取到的数据封装成一个Item对象。Item是一个类似字典的数据容器,用于存储爬取到的数据。

3.4 决定请求的后续处理:

        在解析完下载的内容并构建好Item对象后,引擎会根据爬虫的规则和配置决定请求的后续处理方式。这可能包括返回下一页的请求、跟进链接或将数据提交到Item Pipeline进行处理。

4.如何触发Item Pipeline:

在Scrapy框架中,当每个Item被爬虫解析函数处理完毕后,会通过Item Pipeline进行进一步的处理。Item Pipeline是处理Item的组件,用于对爬取到的数据进行清洗、验证、处理或保存等操作。

触发Item Pipeline的过程如下:

4.1 爬虫解析函数返回Item:

        爬虫解析函数通过yield关键字返回解析得到的Item对象。

4.2 被引擎接收:

        引擎接收到爬虫解析函数返回的Item对象,并将其传递给Item Pipeline组件。

4.3 Item Pipeline处理:

        Item Pipeline按照一定的顺序执行一系列的Item Pipeline组件,对接收到的Item对象进行处理。每个Item Pipeline组件都可以对Item进行操作,如数据清洗、格式转换、验证或保存等。

4.4 数据的最终处理:

        在经过所有的Item Pipeline组件处理后,最终的结果可能是持久化存储数据、导出数据到文件、发送数据到数据库或其他特定的操作,取决于Item Pipeline组件的配置和实现。

5.如何处理数据:

        在Scrapy框架中,数据的处理主要发生在爬虫解析函数和Item Pipeline中。

5.1爬虫解析函数:

        在爬虫解析函数中,使用XPath、CSS选择器、正则表达式等方式从下载的内容中提取数据。然后,可以根据实际需求对数据进行处理、清洗和转换。

5.2Item Pipeline:

        Item Pipeline是对爬取到的数据进行进一步处理的组件。通过配置和定义Item Pipeline,可以对数据进行数据清洗、验证、格式转换、去重以及持久化存储等操作。

6.引擎的关闭流程:

        引擎的关闭流程涉及任务完成后的一系列操作,包括资源的释放、数据的保存和最后的清理工作。以下是引擎的关闭流程的主要步骤:

6.1 保存数据:

        在引擎关闭之前,可以通过Item Pipeline将最终的爬取结果保存到目标存储介质中。这可以包括将数据存储到数据库、文件或其他数据源中。

6.2 执行清理操作:

        引擎关闭时,可以执行一些额外的清理操作。例如关闭数据库连接、释放文件句柄或清除缓存数据等。这些操作有助于释放系统资源并保持环境的整洁。

案例:
import pymongo

class SpiderPipeline:
    def open_spider(self, spider):
        self.client = pymongo.MongoClient("mongodb://localhost:27017")
        self.db = self.client["mydatabase"]
        self.collection = self.db["mycollection"]

    def close_spider(self, spider):
        self.client.close()  # 在关闭引擎之前关闭数据库连接

    def process_item(self, item, spider):
        self.collection.insert_one(dict(item))
        return item

6.3 发送关闭信号:

        当所有的清理操作完成后,引擎会发送关闭信号通知爬虫任务即将结束。这可以触发相关代码的执行,以处理关闭前的最后任务。

案例:
import signal

def close_spider(signum, frame):
    # 执行最后的任务
    print("正在关闭引擎...")
    # 进行清理操作
    print("执行一些清理操作...")
    # 其他操作...
    # 关闭引擎
    reactor.stop()

# 注册信号处理器
signal.signal(signal.SIGINT, close_spider)
signal.signal(signal.SIGTERM, close_spider)

# 启动引擎
from scrapy import signals
from scrapy.crawler import CrawlerProcess

process = CrawlerProcess(settings)
process.crawl(MySpider)
process.start()

        

6.4 引擎关闭:

        最后,引擎会正式关闭,释放所有的资源和关闭相应的组件。引擎的关闭标志着整个爬虫任务的结束。

总结:

        Scrapy引擎的启动流程。

  •  从加载配置开始,引擎会进行组件初始化、调度器启动和请求处理循环等阶段,最终引擎关闭。
  • 请求处理的生命周期包括请求生成、下载器中间件处理、调度器调度和去重、下载器处理、爬虫解析和数据处理、Item Pipeline处理以及最后的数据保存和清理操作。
  • 如何触发Item Pipeline,通过爬虫解析函数返回Item对象,再经过Item Pipeline的处理。
  • 另外,强调了数据处理的重要性,包括从下载内容中解析数据,并在爬虫解析函数和Item Pipeline中进行进一步处理。
  • 最后,引擎的关闭流程包括保存数据、执行清理操作和发送关闭信号,最终关闭引擎。

-------深入了解Scrapy框架的工作原理,并在实际开发中灵活运用。

标签:Pipeline,请求,处理,爬虫,Item,Scrapy,引擎
From: https://blog.csdn.net/m0_56758840/article/details/136971842

相关文章

  • Python编程异步爬虫——协程的基本原理
    Python编程之异步爬虫协程的基本原理要实现异步机制的爬虫,自然和协程脱不了关系。案例引入先看一个案例网站,地址为https://www.httpbin.org/delay/5,访问这个链接需要先等5秒钟才能得到结果,这是因为服务器强制等待5秒时间才返回响应。下面来测试一下,用requests写一个遍历......
  • 关于scrapy框架爬某站出现DEBUG: Redirecting (meta refresh)的问题
    项目场景:Spider框架爬取m.baidu.com搜索结果问题描述访问地址为https://m.baidu.com/s?word=电影&pn=0最后结果变成了http://m.baidu.com/s?cip6=240e:390:6a52:67e5:b0fa:e9d6:226e:376d&word=电影&pn=0&pu=sz%401321_480&t_noscript=jump导致结果不对importjson......
  • 机器学习:智能时代的核心引擎
    目录一、什么是机器学习二、监督学习三、无监督学习四、半监督学习五、强化学习一、什么是机器学习机器学习是人工智能的一个分支,它主要基于计算机科学,旨在使计算机系统能够自动地从经验和数据中进行学习并改进,而无需进行明确的编程。机器学习算法通过构建模型来处......
  • 爬虫工作量由小到大的思维转变---<第四十九章 Scrapy 降维挖掘---中间件系列(1)>
    前言:        Scrapy是一个功能强大的网络爬虫框架,但在实际应用过程中,中间件问题可能会成为一个令人头痛的难题。为了彻底解决Scrapy中的各种疑难杂症,我决定进行第四次全面的学习和实践,并将中间件的问题一一拆解,以确保我对中间件的理解和掌握更加全面和深入。正文:爬......
  • 初用scrapy 报错503 Service Unavailable问题
    毕设基于Hadoop的电子产品推荐系统 系统需要大量的电子产品信息,爬取的是中关村的数据(没有像京东一样的反爬机制)使用scrapyspider爬取页面信息中,可以获取部分页面数据,但爬取一些页面时,会报错503ServiceUnavailable部分代码详情defparse(self,response):if......
  • 最详细爬虫零基础教程08——代理IP
    文章目录一、代理IP二、使用步骤三、小案例总结一、代理IP在Python中使用代理IP进行爬虫是一种常见的技术手段,可以在一定程度上解决被网站限制访问的问题。为什么要使用代理IP1.让服务器以为不是同一个客户端在请求2.防止我们的真实IP被泄露被追究使用场景:1.被......
  • 通用人工智能的基石 —— 人工智能“新基建、关键基础设施”—— 3D游戏引擎
    相关:https://www.unrealengine.com/zh-CN/uses/simulationhttps://www.epicgames.com/site/zh-CN/careers/jobs?lang=zh-CN3D游戏引擎是人工智能的“新基建、关键基础设施”,这个概念或许很多人都没有听说过,甚至初听好感觉离谱、可笑,不过这却是事实。3D游戏引擎对于AI领域可以......
  • Python实战:爬虫基础与Scrapy框架入门
    1、Python爬虫基础1.1、了解网页结构在进行爬虫之前,首先需要了解网页的结构。大多数网页都是使用HTML(超文本标记语言)编写的,而现代网页通常还会使用CSS(层叠样式表)和JavaScript来增强视觉效果和交互性。HTML:网页的主要内容,包括文本、图片、链接等。CSS:用于美化HTML元素,定义......
  • <爬虫部署,进阶Docker>----第十章 探究一下Docker Compose
    前言:        DockerCompose是一个用于定义和运行多容器应用程序的工具,它提供了一种简化和自动化容器编排的方式。在理解DockerCompose的背景之前,让我们先回顾一下容器化技术的发展。容器化技术的出现使得应用程序的部署和管理变得更加轻松和灵活。容器化通过......
  • python scrapy 爬虫爬取quotes.toscrape.com
    1、安装scrapy pip包的管理工具pipinstallscrapy(在cmd中下载)win+r键输入cmd进入命令行2.scrapy介绍它是由五部分组成 引擎 下载器 spider 中间件 管道你只需要知道spider即可因为所有代码都在这里面管道是处理数据的框架定义好接口调用就可以了3.xpa......