最近小小的学习了一下scrapy来抓取数据,在这里进行一个简单的总结。
一、scrapy介绍和原理
1.1、什么是scrapy框架?
scrapy就是一个为了爬取网站数据,提取结构性数据而编写的应用框架。它采用到了Twisted异步网络网络框架,能够加速下载的速度。我们使用少量的代码就能进行快的数据抓取了。说道这里,可以去回顾一下异步、同步、阻塞、非阻塞的区别。
1.2、scrapy的原理
在scrapy框架图汇中,主要是由4个部分组成:Scheduler、Downloader、Spiders和ItemPipeline构成。其中Scrapy Engine就是一个核心的作用。我们分别看看每个部分的作用是什么?
- Scheduler:它就是一个队列,里面存放的就是requests对象。requests对象从Scheduler出来之后,会经过Scrapy Engine传到下载中间件,然后下载中间件会传递给Downloader。
- Downloader:接收到了requests对象的下载器会去发送请求,获取相应response,然后将这个response经过Scrapy Engine、下载中间件、Scrapy Engine和Spider中间件传到Spiders处。
- Spiders:主要的作用就是提取url和数据。Spiders提取到的url会处理成requests,经过爬虫中间件和Engine传递给Scheduler。Spiders提取的数据就交给了Item Pipeline,
- Item Pipeline:它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。
这里的Scrapy Engine的核心起到了一个解耦的作用。
下面我们看看,那些模块需要我们去实现:
item | 作用 | 实现与否 | |
---|---|---|---|
Scrapy Engine | 负责数据和信号在不同模块间的传递 | scrapy已经实现 | |
Scheduler | 本质是一个队列,存放requests对象 | scrapy已经实现 | |
Downloader | 接收Engine发过来的requests,并返回响应给Engine | scrapy已经实现 | |
Spider | 处理Engine发过来的response,进行url和数据的提取 | 需要自己实现 | |
Item Pipeline | 处理Engine传过来的数据 | 需要自己实现 | |
下载中间件 | 可以自定义的下载扩展,比如设置代理 | 一般不用自己写 | |
爬虫中间件 | 可以自定义requests请求和进行response过滤 | 一般不用自己写 |
到这里我们就知道了,一般需要我们手写就是Spider和Item Pipeline了。