scrapy 框架的安装及流程-01

一、简介

 scrapy的优势:

  1、为了更利于我们将精力集中在请求与解析上

  2、企业级的要求,效率高

 

二、模块安装

scrapy支持Python2.7和python3.4以上版本

1.在https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应的Twisted的版本文件

 注意:

cp为python 版本号,若版本不对应运行spiders 文件可能因为不兼容报错。这时需要卸载重新安装与python版本对应的Twisted

 卸载:

安装与pyhon37对应的Twisted: Twisted-20.3.0-cp37-cp37m-win_amd64.whl

 pip install Twisted==20.3.0

 2. 在命令行进入到Twisted的目录 执行pip install 加Twisted文件名 pip install Twisted

 3.执行pip install scrapy

 三、运行流程

   只要是框架就要掌握其运行流程

      1.找到目标数据==》2.分析请求流程==》3.构造http请求==》4.提取数据==》5.数据持久化

A:新生报到的例子

 宿舍 床号 班级 卡号

移动办卡 床单

可能有新的需求会交给管理员,然后重新排队(如换床号,不住宿等),然后再到报到处报道拿资料,然后到新生等待处,当 需求满足0时退出

B:

上图显示了Scrapy框架的体系结构及其组件,以及系统内部发生的数据流(由红色的箭头显示) Scrapy中的数据流由执行引擎控制,流程如下:

1.首先从爬虫获取初始的请求

2.将请求放入调度模块,然后获取下一个需要爬取的请求

3.调度模块返回下一个需要爬取的请求给引擎

4.引擎将请求发送给下载器,依次穿过所有的下载中间件

5.一旦页面下载完成,下载器会返回一个响应包含了页面数据,然后再依次穿过所有的下载中间件。

6.引擎从下载器接收到响应,然后发送给爬虫进行解析,依次穿过所有的爬虫中间件

7.爬虫处理接收到的响应,然后解析出item和生成新的请求,并发送给引擎

8.引擎将已经处理好的item发送给管道组件,将生成好的新的请求发送给调度模块,并请求下一个请求

9.该过程重复,直到调度程序不再有请求为止。

 第四部分、简单的使用

创建爬虫文件bd步骤

1.Terminal窗口输入:scrapy

2.创建项目: scrapy startproject <project_name> [project_dir] ps: "<>"表示必填 ,"[]"表示可选 

 scrapy startproject baidu(项目名字baidu)

 3.cd 到项目下 scrapy genspider [options] <name> <domain> scrapy genspider example example.com 会创建在项目/spider下 ;

其中example 是爬虫文件名, example.com 是 url

 如下:scrapy genspider bd www.baidu.com

 4.运行项目 scrapy crawl 爬虫文件名(bd),运行bd.py文件   

 5.setting 里配置 更改

 6.bd.py文件代码

import scrapy
class BdSpider(scrapy.Spider):  # BdSpider这个类继承了scrapy.Spider类
    name = "bd"  # 名字是唯一的,不能重复,启动项目的时候是根据这个名字来找爬虫文件的
    allowed_domains = ["www.baidu.com"]  # 允许的域名
    start_urls = ["https://www.baidu.com"] # 首个请求,必须要有
    '''
    parase 这个函数要完成一下两个功能:
    1.解析响应,封装成item对象并返回这个对象
    2.提取新的需要下载的url,创建新的request,并返回它
    '''
    def parse(self, response): # 必须是parse函数,不可以乱改名
        print('***************************************')
        print('***************************************')
        print(response)  # response对象
        # print(response.body)
        # print(response.body.decode())
        print(response.text) # 取数据有两种方法
        pass

7.运行截图

总结:

请求给到引擎,然后引擎先给给到调度器,再到中间件,最后到管道。即请求由引擎一顿操作完成解析

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2023-11-28 21:12  人生努力努力努力就好  阅读(66)  评论(0编辑  收藏  举报