多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg) ***** ## 为什么要学习scrapy ![](https://img.kancloud.cn/78/11/78116e115a25c92a7f1bd003576777bc_1039x503.png) ## 什么是Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取 Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度 http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html ## 异步和非阻塞的区别 ![](https://img.kancloud.cn/20/f1/20f18a9397ea247648bfe5163d97b816_1426x482.png) 异步:调用在发出之后,这个调用就直接返回,不管有无结果 非阻塞:关注的是程序在等待调用结果时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程。 ## Scrapy工作流程 **回顾之前的爬虫流程** ![](https://img.kancloud.cn/75/37/753759540cf54ee477fc791261ee6b0c_1353x755.png) **另外一种爬虫方式** ![](https://img.kancloud.cn/8d/b1/8db1d34f240a4d28f9a6a85497ab58bb_1130x584.png) ***** **Scrapy的爬虫流程** ![](https://img.kancloud.cn/87/1c/871ca6c393c6bf98da4f1a81d935e2e1_1130x668.png) | Scrapy engine(引擎) | 总指挥:负责数据和信号的在不同模块间的传递 | scrapy已经实现 | |--- | --- | --- | | Scheduler(调度器) | 一个队列,存放引擎发过来的request请求 | scrapy已经实现| | Downloader(下载器) | 下载把引擎发过来的requests请求,并返回给引擎 | scrapy已经实现| | Spider(爬虫) | 处理引擎发来的response,提取数据,提取url,并交给引擎 | 需要手写| | Item Pipline(管道) | 处理引擎传过来的数据,比如存储 | 需要手写| | Downloader Middlewares(下载中间件) | 可以自定义的下载扩展,比如设置代理 | 一般不用手写| | Spider Middlewares(中间件) | 可以自定义requests请求和进行response过滤 | 一般不用手写| ## Scrapy入门 ``` 1 创建一个scrapy项目 scrapy startproject mySpider 2 生成一个爬虫 scrapy genspider demo "demo.cn" 3 提取数据 完善spider 使用xpath等 4 保存数据 pipeline中保存数据 ``` ## 创建一个scrapy项目