什么是Scrapy
Scrapy是一种快速的高级的网络爬虫和数据抓取框架, 用于对网站进行爬取并从其页面提取结构化数据,被广泛用于数据挖掘和自动化测试。
安装Scrapy
在Linux、MacOS上直接使用pip安装就可以了。但是在Windows安装会报错,这是由于其依赖的twisted这个异步网络框架在pip安装中出现错误,此时我们可以在一个网站上搜索 twisted 下载下来的是一个wheel格式的文件,我们可以使用pip来安装它。(下载的时候需要注意平台) 然后我们再次使用pip安装scrapy就好了。
框架概览
scrapy框架数据流.png相关概念
上图是经典的Scrapy流程图,其中的组件如下:
- Engine:框架引擎,负责控制系统所有组件之间的数据流,并在发生某些操作时触发事件。
- Scheduler:调度器接受来自引擎的请求,并将他们排队,以便在引擎请求时提供这些请求。
- Downloader:下载器负责获取网页并将其送入引擎,引擎负责将其网页送给Spider。
- Spider:spider是由scrapy用户编写的自定义类,用于解析响应并从中提取项目或后续的附加请求。
- Item Pipeline:项目管道负责处理spdier提取的项目,典型的任务包括清理数据,验证数据以及将数据保存到相应的介质中(数据库,xlsx,csv等都可以)
- Downloader middlewares:下载器中间件是位于引擎与下载器之间的特定钩子,当它们从引擎传递到下载器时处理请求,以及从下载器传递到引擎的响应。如果需要执行以下操作时可以使用下载器中间件:
- 在将请求发送给下载器之前处理该请求
- 变更在传递给spdier之前收到的响应
- 发送新的请求,而不是将收到的响应传递给spider
- 在不获取网页的情况下将响应传递给spider
- 如果需要悄悄的放弃一些请求
- Spider middlewares:spider中间件是位于引擎之间的特定钩子,能够处理spider的输入(响应)和输出(项目和请求),如果需要以下操作时可以使用spider中间件:
- spider回调的后处理输出-更改/添加/删除/请求或项
- 后处理启动请求
- 处理spider异常
- 对一些基于响应内容的请求调用errback,而不是回调
数据流
Scrapy的爬取以及处理数据的方式就是在上面的组件中来回流动:
- 引擎从spider中得到一个初始的request来开始爬虫
- 引擎将请求发送给调度器并且继续要求一个request去爬取
- 调度器将从引擎得到的请求进行排队,在引擎需要的时候发送给引擎
- 引擎将请求发送给下载器,期间需要通过下载器请求中间件(process_request())的处理
- 下载器一旦下载页面完成,会将得到的Response传递给引擎,其中需要通过下载器响应中间件(process_response())的处理
- 引擎从下载器中得到响应后,会把他们传递给spider来处理,其中需要通过spider输入中间件(process_spider_input())处理
- spider得到这个响应并且分析这个响应将其分割为数据和新的请求,其中将数据通过spider输出中间件(process_spider_output())发送给引擎,而新的request直接发送给引擎就像第一步那样。
- 引擎得到数据并发送给Item Pipelines,而新的请求直接发送给调度器。
- 重复以上过程直到没有新的请求为止。
接下来
上面介绍了scrapy的基本原理,接下来我以爬取 食品安全抽检公布结果查询系统 这个网站为例来详细介绍scrapy的使用方法。
网友评论