目录
1. Scrapy框架
在python爬虫中:requests + selenium 可以解决目前90%的爬虫需求。
scrapy框架是为了让爬虫更强大、更高效。它是一个为了爬取网站数据,提取结构性数据而编写的应用框架,只需要实现少量代码,就能够快速的抓取到数据。
- 简介
Scrapy 是一个基于Twisted (用Python实现的基于事件驱动的网络引擎框架)的异步处理框架,是纯Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求,只需要定制开发几个模块就可以轻松实现一个爬虫。
- 组成
Scrapy Engine 引擎(框架核心)
处理整个系统的数据流, 触发事务。
Spiders 蜘蛛
定义爬取逻辑和网页的解析规则, 主要负责解析响应并生成提取结果和新的请求。
Scheduler 调度器
接受引擎发过来的请求并将其加入队列中, 在引擎再次请求的时候将请求提供给引擎。
Downloader 下载器
下载网页内容, 并将网页内容返回给蜘蛛。
Item Pipeline 项目管道
负责处理由蜘蛛从网页中抽取的项目,主要任务是清洗、验证和存储数据。
Item 项目
定义爬取结果的数据结构,爬取的数据会被赋值成该Item 对象。
- 中间件
Downloader Middlewares 下载器中间件
位于引擎和下载器之间的框架,主要处理引擎与下载器之间的请求及响应。
Spider Middlewares 蜘蛛中间件
介于引擎和蜘蛛之间的框架,主要处理输入蜘蛛的响应和输出的结果及新的请求。
Scheduler Middewares 调度中间件
介于引擎和调度之间的中间件,从引擎发送到调度的请求和响应。
- Spider Middlewares 蜘蛛中间件
当Downloader 生成Response 之后, Response 会被发送给Spider ,在发送给Spider 之前, Response会首先经过Spider Middleware 处理,当Spider 处理生成Item 和 Request 之后, Item 和 Request 还会经过Spider Middleware 的处理。
作用:
1)在Downloader 生成的Response 发送给Spider 之前,也就是在Response 发送给Spider之前对Response 进行处理。
2)在Spider 生成的Request 发送给Scheduler 之前,也就是在Request 发送给Scheduler之前对Request 进行处理。
3)在Spider 生成的Item 发送给Item Pipeline 之前,也就是在Item 发送给Item Pipeline之前对Item 进行处理。
Scrapy 已经提供了许多Spider Middleware ,它们被SPIDER_MIDDLEWARES_BASE变量所定义。若有自定义的Spider Middleware,首先加入到SPIDER_MIDDLEWARES 设置中, 该设置会和SPIDER_MIDDLEWARES_BASE 定义的Spider Middleware 合并。然后根据键值的数字优先级排序,得到一个有序列表。第一个Middleware 是最靠近引擎的,最后一个Middleware 是最靠近Spider 的。
- 流程
(1) Engine 首先打开一个网站,找到处理该网站的Spider,并向该Spider 请求第一个要爬取的URL 。
(2) Engine 从Spider 中获取到第一个要爬取的URL ,并通过Scheduler 以request 的形式调度。
(3) Engine 向Scheduler 请求下一个要爬取的URL 。
(4) Scheduler 返回下一个要爬取的URL 给Engine , Engine 将URL 通过Downloader Middlewares 转发给Downloader 下载。
(5)一旦页面下载完毕, Downloader 生成该页面的Response ,并将其通过Downloader Middlewares发送给Engine 。
(6) Engine 从下载器中接收到Response ,并将其通过Spider Middlewares 发送给Spider 处理。
(7) Spider 处理Response ,并返回爬取到的Item 及新的Request 给Engine 。
(8) Engine 将Spider 返回的Item 给Item Pipeline ,将新的Request 给Scheduler 。
(9) 重复第(2)步到第(8)步,直到Scheduler 中没有更多的Request , Engine 关闭该网站,爬取结束。
- 自动化处理
2. Scrapy入门实例
- 安装
1)安装 lxml
2)安装 pyOpenSSL
3)安装 Twisted
4)安装 pyWin32
5)安装 scrapy
pip install scrapy
- 入门实例
(1)创建scrapy项目(命令行方式)
首先在命令行进入PyCharm的项目目录,然后执