🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### scrapy工作原理图 ![](https://box.kancloud.cn/a3cf372a0dafcc6d0c9274b6448f9b2e_906x529.png) #### 组件 ``` engine (内部组件) 引擎,框架的核心,其他所有组件在其控制下工作 ``` ``` scheduler(内部组件) 调度器,负责对spider提交的下载请求进行调度 ``` ``` downloader(内部组件) 下载器,负责下载页面,发送request请求和接收response响应 ``` ``` spider(用户实现) 爬虫,负责提取页面中的数据, 并产生对新页面的下载请求 ``` ``` middlewares(可选组件) 中间件,负责对request和response对象进行处理 ``` ``` pipelines(可选组件) 数据管道,负责对爬取到的数据进行处理 ``` #### 数据流 ``` request scrapy中的http请求对象 ``` ``` response scrapy中http响应对象 ``` ``` item 从页面中爬取得一项数据 ``` #### 执行流程 ``` 1. 当SPIDER要爬取某URL地址的页面时,需使用该URL构造一个Request对象,提交给ENGINE ``` ``` 2. Request对象随后进入SCHEDULER按某种算法进行排队,之后的某个时刻SCHEDULER将其出队,送往DOWNLOADER ``` ``` 3. DOWNLOADER根据Request对象中的URL地址发送一次HTTP请求到网站服务器,之后用服务器返回的HTTP响应构造出一个Response对象,其中包含页面的HTML文本 ``` ``` 4. Response对象最终会被递送给SPIDER的页面解析函数(构造Request对象时指定)进行处理, 页面解析函数从页面中提取数据,封装成Item后提交给ENGINE,Item之后被送往ITEMPIPELINES 进行处理,最终可能由EXPORTER(图2-1中没有显示)以某种数据格式写入文件(csv,json); 另一方面,页面解析函数还从页面中提取链接(URL),构造出新的Request对象提交给ENGINE ```