接触爬虫功能后,发现一个好的爬虫功能可以帮助自动化信息获取,在日常关键信息搜集和解析方面效率提升很明显。为了更系统深入学习,接下来需要一步步研究学习Scrapy框架来实现。
这里使用官方文档介绍下Scrapy框架:
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。
1、创建一个Scrapy项目
下发命令scrapy startproject tutorial后,就在此/Users/tutorial目录下创建了开发文件夹。
创建的tutorial文件夹内容目录图中目录文件说明:
scrapy.cfg: 项目的配置文件
tutorial/: 该项目的python模块
tutorial/items.py: 项目中的item文件
tutorial/middlewares.py: 项目中的middlewares文件
tutorial/pipelines.py: 项目中的pipelines文件
tutorial/settings.py: 项目的设置文件
tutorial/spiders/: 放置spider代码的目录
这些自动创建的文件是做什么用的可以先从下面各系统功能逻辑架构图来理解。
Scrapy架构图Scrapy架构图各系统功能组成说明:
Engine:核心引擎,负责控制和调度各个组件,保证数据流转。
Scheduler:负责管理任务、过滤任务、输出任务的调度器,存储、去重任务都在此控制。
Downloader:下载器,负责在网络上下载网页数据,输入待下载URL,输出下载结果。
Spiders:用户自己编写的爬虫脚本,可自定义抓取意图。
Item Pipeline:负责输出结构化数据,可自定义输出位置。
图中MIDDLEWARE分为两部份功能用途:
Downloader middlewares:介于引擎和下载器之间,可以在网页在下载前、后进行逻辑处理。
Spider middlewares:介于引擎和爬虫之间,可以在调用爬虫输入下载结果和输出请求/数据时进行逻辑处理。
Scrapy架构图事物运行说明(图中数字):
1.引擎从自定义爬虫中获取初始化请求(也叫种子URL)。
2.引擎把该请求放入调度器中,同时引擎向调度器获取一个待下载的请求(这两部是异步执行的)。
3.调度器返回给引擎一个待下载的请求。
4.引擎发送请求给下载器,中间会经过一系列下载器中间件。
5.这个请求通过下载器下载完成后,生成一个响应对象,返回给引擎,这中间会再次经过一系列下载器中间件。
6.引擎接收到下载返回的响应对象后,然后发送给爬虫,执行自定义爬虫逻辑,中间会经过一系列爬虫中间件。
7.爬虫执行对应的回调方法,处理这个响应,完成用户逻辑后,会生成结果对象或新的请求对象给引擎,再次经过一系列爬虫中间件。
8.引擎把爬虫返回的结果对象交由结果处理器处理,把新的请求对象通过引擎再交给调度器。
如上执行完后从1开始重复执行,直到调度器中没有新的请求处理。
如上架构学习资料来源此作者地址,感谢分享学习。
网友评论