Python爬虫

Python爬虫 知识量:11 - 28 - 71

5.1 Scrapy是什么><

Scrapy架构- 5.1.1 -

Scrapy是一个用于Python的快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

以下是Scrapy的主要架构组件:

  • 引擎(Engine):这是Scrapy框架的核心部分,负责控制系统所有组件之间的数据流。

  • 调度器(Scheduler):调度器负责接收来自引擎的请求,并将其放在队列中,以便在需要时按一定次序交给引擎。

  • 下载器(Downloader):下载器负责接收来自引擎的下载请求,然后去网络上下载对应的数据再交还给引擎。

  • 爬虫(Spider):这是操作最多的部分,用于解析下载器返回的响应。爬虫负责发送需要爬取的链接给引擎,最后引擎把其他模块请求回来的数据再发送给爬虫,爬虫就去解析想要的数据。这个部分由开发者自己编写,因为要爬取哪些链接,页面中的哪些数据是需要的,都是由程序员自己决定。

  • 管道(Item Pipeline):管道负责处理爬虫解析好的数据,例如数据持久化(存入数据库),查重等。

  • 下载中间件(Downloader middlewares):处理引擎发来的请求和下载器发出的响应。

  • 爬虫中间件(Spider middlewares):处理进入爬虫的响应和出爬虫的数据或新请求。

这些组件通过事件驱动的方式协同工作,完成网页抓取和数据提取的任务。Scrapy的架构使得开发者可以灵活地定制和扩展其功能,以满足特定的需求。

Scrapy数据流- 5.1.2 -

Scrapy中的数据流由执行引擎控制,其过程如下:

  1. 引擎打开一个网站,找到处理该网站的Spider并向该Spider请求第一个要爬取的URL(s)。

  2. 引擎从Spider中获取到第一个要爬取的URL并在调度器(Scheduler)以Request调度。

  3. 引擎向调度器请求下一个要爬取的URL。

  4. 调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求(request)方向)转发给下载器(Downloader)。

  5. 一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(返回(response)方向)发送给引擎。

  6. 引擎从下载器中接收到Response并通过Spider中间件(输入方向)发送给Spider处理。

  7. 引擎将(Spider返回的)爬取到的Item给Item Pipeline,将(Spider返回的)Request给调度器。

  8. 重复上述过程,直到调度器中没有更多地request,引擎关闭该网站。

这个数据流的过程允许Scrapy高效地处理多个IO操作,同时还能处理单个任务分成不同部分运行的情况。