Scrapy 框架
-
Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。
-
框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。
-
Scrapy 使用了 Twisted
['twɪstɪd]
(其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。
Scrapy架构图(绿线是数据流向):
-
Scrapy Engine(引擎)
: 总指挥,负责Spider
、ItemPipeline
、Downloader
、Scheduler
中间的通讯,信号、数据传递等,scrapy已经实现 -
Scheduler(调度器)
: 一个队列,存放引擎
发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎
需要时,交还给引擎,scrapy已经实现
。 -
Downloader(下载器)
:负责下载Scrapy Engine(引擎)
发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎)
,由引擎
交给Spider
来处理,scrapy已经实现 -
Spider(爬虫)
:处理引擎发过来的Responses,提取数据和url,提交给引擎
,需要手写 -
Item Pipeline(管道)
:它负责处理Spider
中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方,需要手写 -
Downloader Middlewares(下载中间件)
:可以自定义扩展下载功能的组件,比如设置代理 -
Spider Middlewares(Spider中间件)
:一个可以自定扩展和操作引擎
和Spider
中间通信
的功能组件(比如过滤进入Spider
的Responses和自定义从Spider
出去的Requests)
注意!只有当调度器
中不存在任何request了,整个程序才会停止,(也就是说,对于下载失败的URL,Scrapy也会重新下载。
制作 Scrapy 爬虫 一共需要4步:
- 创建一个scrapy项目
scrapy startproject 项目名
- 生成一个爬虫
scrapy genspider 爬虫名 域名
- 提取数据
完善spider,使用xpath等方法
【注意:scrapy.spider中parse方法用于处理start_url对应的响应,方法名不能更改】
- 保存数据
pipeline中保存数据【多个pipeline时,为使数据能够在pipeline中进行传递,需在每个pipeline中return item】
【注意:pipeline中process_item方法名不能更改,否则无法通过管道进行处理】
补充笔记
- extract():返回一个包含所有字符串数据的列表;extract_frist()返回列表中的第一个字符串
- 需要爬取的url地址必须要处于allow_domain下的链接
- response.xpath()返回的时一个含有selector对象的列表