Scheduler(调度器)部门主要负责处理引擎发送过来的requests对象(即网页请求的相关信息集合,包括params,data,cookies,request headers…等),会把请求的url以有序的方式排列成队,并等待引擎来提取(功能上类似于gevent库的queue模块)。
Downloader(下载器)部门则是负责处理引擎发送过来的requests,进行网页爬取,并将返回的response(爬取到的内容)交给引擎。它对应的是爬虫流程【获取数据】这一步。
Spiders(爬虫)部门是公司的核心业务部门,主要任务是创建requests对象和接受引擎发送过来的response(Downloader部门爬取到的内容),从中解析并提取出有用的数据。它对应的是爬虫流程【解析数据】和【提取数据】这两步。
Item Pipeline(数据管道)部门则是公司的数据部门,只负责存储和处理Spiders部门提取到的有用数据。这个对应的是爬虫流程【存储数据】这一步。
Downloader Middlewares(下载中间件)的工作相当于下载器部门的秘书,比如会提前对引擎大boss发送的诸多requests做出处理。
Spider Middlewares(爬虫中间件)的工作则相当于爬虫部门的秘书,比如会提前接收并处理引擎大boss发送来的response,过滤掉一些重复无用的东西。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c29b6958c684d0f88fa3e4b4d6c22c18.png)
爬虫原理
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8e7e9d647a9991d52466504d71f99e3f.png)
Scrapy中的程序全部都是异步模式
输入一行能帮我们创建Scrapy项目的命令:scrapy startproject douban,douban就是Scrapy项目的名字
![#######](https://i-blog.csdnimg.cn/blog_migrate/350c9dd24c57345773ada8785078f57e.png)
第1行代码:定义一个爬虫类DoubanSpider。就像我刚刚讲过的那样,DoubanSpider类继承自scrapy.Spider类。
第2行代码:name是定义爬虫的名字,这个名字是爬虫的唯一标识。name = 'douban’意思是定义爬虫的名字为douban。等会我们启动爬虫的时候,要用到这个名字。
第3行代码:allowed_domains是定义允许爬虫爬取的网址域名。如果网址的域名不在这个列表里,就会被过滤掉。
第4行代码:start_urls是定义起始网址,就是爬虫从哪个网址开始抓取。在此,allowed_domains的设定对start_urls里的网址不会有影响。
第6行代码:parse是Scrapy里默认处理response的一个方法,中文是解析。
代码实现——创建项目,scrapy startproject douban
代码实现——编辑爬虫
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c7c9a81f82d0fbc10ea4833facdf6c3e.png)
import scrapy
import bs4
from ..items import DoubanItem
class DoubanSpider(scrapy.Spider):
name = 'douban'
allowed_domains = ['https://book.douban.com']
start_urls = []