什么Scrapy?
Scrapy是基于Python的一款网络爬虫框架,是众多Python爬虫框架中使用人数最多,功能最为全面,用途最为广泛的框架。
所谓框架,就是在别人已经搭建好的舞台上施展自己的才艺,基于Scrapy可以大大提高我们的开发效率。下面是Scrapy的架构图:
我们看到主要由以下七大组件组成:
引擎(Engine)
引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。
调度器(Scheduler)
调度器从引擎接受request并将他们入队,以便之后引擎请求他们时提供给引擎。
下载器(Downloader)
下载器负责获取页面数据并提供给引擎,而后提供给spider。
蜘蛛(Spiders)
Spider是Scrapy用户编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。 每个spider负责处理一个特定(或一些)网站。
管道(Item Pipeline)
Item Pipeline负责处理被spider提取出来的item。典型的处理有清理、 验证及持久化(例如存取到数据库中)。
下载器中间件(Downloader middlewares)
下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的response。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。
Spider中间件(Spider middlewares)
Spider中间件是在引擎及Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及requests)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。
上图中红色线条表示数据流向。
Scrapy中的数据流由执行引擎控制,其过程如下:
1、引擎从Spider中获取到一个爬取的URL(第一个URL我们在代码里面指定)并交给Scheduler。
2、引擎在Scheduler中调度下一个请求,并爬取下一个请求。
3、调度程序将下一个请求返回给引擎。
4、引擎将请求发送到下载器,并通过下载器中间件。
5、页面下载完成后,下载器生成一个响应(基于该页面)并将其发送到引擎,并通过下载器中间件。
6、引擎接收来自下载器的响应,并将其发送给Spiders进行处理,并通过Spiders中间件。
7、Spiders处理响应,并通过Spiders中间件向引擎返回已收集的项和新请求。
8、引擎将处理过的项发送到项管道,然后将处理过的请求发送到调度程序,并请求可能的下一个请求进行爬行。
9、这个过程会重复(从步骤1开始),直到调度程序不再发出请求为止。
在这里如果有不懂得地方暂时不要死钻牛角尖,只要有个整体认识就好,后续慢慢来。
领取专属 10元无门槛券
私享最新 技术干货