在家无聊数日,消磨时间无非是打游戏扯淡。今日无事写点东西给自己看。
做爬虫也有一段时间了,但是对于爬虫一直没有一个没有一个系统的整理和分析,今日来随便写点关于scrapy的东西。
首先爬虫常用的模块有,requests,lxml,re等。对于基础的东西后边会写,这里先来分析一下scrapy这个框架,这也是实际爬虫工作中最常用的一个工具。
关于scrapy框架其最初是为了页面抓取所涉及的,也可以应用在获取API所返回的数据或者通用网络爬虫。scrapy用途广泛,可以用于数据挖掘,监测和自动化测试。
他利用Twisted异步网络库来处理网络通讯。入下图(一张用烂的scrapy框架结构图):
关于scrapy框架来说这张图就概括了他的业务流程和操作。
- engine(引擎) 引擎的作用就是用来处理整个系统的数据流,触发事务(框架核心)
- spider(爬虫) 爬虫也就是我们主要工作的地方,在这里我们给定他的抓取目标和相关规则
- scheduler(调度器) 用来接收引擎发过来的请求,压入队列,并在引擎再次请求的时候返回。简而言之调度器的用处就是存放队列,在这里我们可以完成对于消息的去重和顺序的设置。
- downloader(下载器) 下载器的作用就是下载页面内容,并将网页内容返回给spider(scrapy的下载器是建立在twisted这个搞笑的一部模型上的)
- pipeline(管道) 管道的作用主要负责处理爬虫从网页中抽取的实体,主要的功能就是持久化储存和对于数据的验证。(其中需要注意的是管道中最佳不要有大规模的计算和过多逻辑)
- downloader middlewares(下载器中间件) 其位于scrapy引擎和下载器之间。主要是处理scrapy引擎与下载器之间的请求及相应。
- spider middlewares(爬虫中间件) 其位于scrapy引擎和爬虫之间,主要处理spider的响应输入和请求输出。
- scheduler middlewares(调度中间件) 位于scrapy引擎和调度之间,处理从scrapy引擎发送到调度的请求和相应的处理
关于scrapy工作流程:
- 引擎从调度器中取出一个链接url用于接下来的抓取
- 引擎把url封装成一个请求request传给下载器
- 下载器将请求内容下载并打包为一个response返回给爬虫
- 爬虫对返回的response进行解析和下一步操作的处理
- spider解析完全的实体部分item交给管道进行进一步的处理