scrapy介绍:
scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可应用在包括数据挖掘,信息处理或存储历史数据等一系列的需求之中,我们只需要实现少量的代码,就能够快速的抓取,Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度。
scrapy的数据流图片:
scrapy的基本模块:
爬虫
爬虫主要就发起起始请求,并通过回调函数,对响应数据进行提取,生成item给管道进行后续处理,或者生成新的请求。
引擎
从上图就能看出,引擎处于整个scrapy项目的核心位置,其主要处理整个系统的数据流,触发各种事件。
调度器
调度器其实就是维护了一个先进先出的队列,对于入队的请求会进行去重与过滤,可以保证请求出队的顺序,保证请求按顺序执行。其中请求顺序并不一定是固定的,可以通过在发起请求或在中间件中时设置priority来改变优先级,其中值越小越快。比如在发起的请求的参数中添加scrapy.Request(property= 目标优先级),或直接request.property=目标优先级。
下载器
下载器其实就是发送请求并接受保存响应数据,是基于twisted异步框架实现的,可以同时处理多个请求,在回调中将下载结果传递给引擎。在请求的过程中会处理重定向,保证获取最终数据;维护cookie与session数据,确保对于不同的请求能保存持久性对话。
中间件
中间件主要包括爬虫,下载和扩展中间件,其中爬虫中间件主要处理爬虫与引擎之间的非起始请求与响应,而下载中间件主要处理下载器和引擎之间的非起始请求与响应。旨在数据的传输过程中对其进行校验与增强。还有扩展的中间件。
管道
管道其作用主要用于处理item数据,进行过滤与提取,或者进行持久化,生成相应文件等操作
数据执行流程
- 通过运行的爬虫的start_urls或start_requests方法,通过爬虫中间件的process_start_requests()将起始请求发送给引擎。
- 引擎将请求传递给调度器进行构建,调度器根据调度策略,将构建好的请求返回和给引擎。
- 引擎将请求通过发送给下载器,下载器下载完成后,再将响应返回给引擎。在这期间请求与响应都会经过下载中间件。
- 引擎在接收到响应后,会将响应返回给爬虫的默认回调解析函数parse,在响应返回时会经过爬虫中间件的process_responses()
- 在回调解析函数中,会根据代码逻辑,重新发起请求给引擎,或者生成item并传给管道
- 重新发送请求,则会重复上述次序,继续执行;传给管道,对数据进行持久化或文本存储等
开始项目
- 环境准备 python3.6以上版本,注意安装scrapy前需要安装lxml,parsel,pyOpenSSL,Twisted,cryptography,w3lib,它们是s