Scrapy框架图:数据库
scrapy-engine:引擎,负责itemPipeline+Spiders+Scheduler+Downloader间的通信和数据传递缓存
scheduler:调度器,负责接收引擎发送过来的Requests请求,并将请求按必定方式排列入队,以后等待引擎来请求时交给引擎框架
downloader:下载器,负责下载引擎发送的全部Requests请求,并将其捕获到的Responses交还给引擎,引擎交给spiders来处理dom
spiders:负责处理全部的Responses,从中分析提取数据,获取item字段须要的数据,并将须要跟进的URL提交给引擎,再次进入调度器scrapy
itempipeline:负责处理spiders中获取到的item字段,并进行处理(去重/持久化存储:就是保存数据)ide
downloader middlerwares:下载中间件,是一个自定义扩展下载功能的组件网站
spiders middlewares:spider中间件,操做引擎和spiders之间通讯的中间件(进入spiders的Responses和从spiders出去的Requests)中间件
流程(简化版):blog
程序开始运行ip
spiders将须要处理的网站URL交给引擎,引擎再将Requests请求交给调度器scheduler进行处理:后者将Requests请求按必定方式排列入队;
必定时间后(引擎要求取回Resquests)调度器将处理过的Requests交给引擎,引擎按照下载中间件downloader middlewares的设置要求将
Requests交给下载器downloader;下载器处理Requests(若是Requests下载失败,引擎会告诉调度器,让后者记录并在以后从新下载),下
载成功的Resquests能够捕获到相应的Responses;下载器将Responses(spider中间件处理过的)交给引擎,随后引擎将Responses交给spiders
处理;spiders处理Responses,将提取到的item字段数据交给itempipeline,同时将须要跟进的URL交给引擎,引擎再交给调度器,以此循环。
当调度器中不存在Requests请求时,程序运行结束
Scrapy项目实现步骤:
1.创建项目:
-在CMD下输入scrapy3 startproject item_name(项目名)
-cd item_name>>>scrapy3 genspider spider_name(spider名) domain_name(域名)
2.在items.py文件中定义字段,这些字段用来临时存储须要保存的数据(方便之后数据保存到数据库或本地)
3.在spider_name.py文件下编写爬虫脚本
4.在pipelines.py文件下保存数据
5.在settings.py文件下配置相关环境,这一步也不是必须作的
-将ROBOTSTXT_OBAY=True修改成ROBOTSTXT_OBAY=False(ROBOTSTXT协议规定哪些目录能够抓取)
-设置Requests头信息,取消注释行DEFAULT_REQUEST_HEADERS={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
-取消如下注释:Scrapy能够缓存已有的Requests,当再次请求时,若是存在缓存文档则返回缓存文档,而不用去网站请求,既能够加快本地缓存速度,也能够减轻网站压力