
*****
## 为什么要学习scrapy

## 什么是Scrapy
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取
Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度
http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html
## 异步和非阻塞的区别

异步:调用在发出之后,这个调用就直接返回,不管有无结果
非阻塞:关注的是程序在等待调用结果时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程。
## Scrapy工作流程
**回顾之前的爬虫流程**

**另外一种爬虫方式**

*****
**Scrapy的爬虫流程**

| 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项目