爬虫入门(六)——Scrapy框架初探

    技术2023-10-16  73

    目录

     

    1. Scrapy介绍

    1.1 什么是Scrapy

    1.2 爬虫的几种工作模式

    2. Scrapy的工作流程

    3.Scrapy入门

    4. pipline使用


    1. Scrapy介绍

    1.1 什么是Scrapy

    Scrapy是⼀个为了爬取⽹站数据,提取结构性数据⽽编写的应⽤框架,我们只需要实现少量的代码,就能够快速的抓取

    特点:Scrapy使⽤了Twisted异步⽹络框架,可以加快我们的下载速度(相同条件下用Scrapy爬取信息的速度要比直接爬取的速度快很多,有时几乎是瞬时的,具体例子在后续会给出)安装:pip install scrapy (因为Scrapy框架较大,直接安装速度慢且容易失败,因此可以采用换源安装,如:pip install scrapy -i https://pypi.douban.com/simple)

      异步和⾮阻塞的区别:

     

    异步:调⽤在发出之后,这个调⽤就直接返回,不管有⽆结果

    ⾮阻塞:关注的是程序在等待调⽤结果时的状态,指在不能⽴刻得到结果之 前,该调⽤不会阻塞当前线程

     

    1.2 爬虫的几种工作模式

     

     

     

    2. Scrapy的工作流程

     

     

    Scrapy engine(引擎)总指挥:负责数据和信号的在不同模块间的传递scrapy已经实现Scheduler(调度器)⼀个队列,存放引擎发过来的request请求scrapy已经实现Downloader(下载器)下载把引擎发过来的requests请求,并返回给引擎scrapy已经实现Spider(爬⾍)处理引擎发来的response,提取数据,提取url,并交给引擎需要⼿写Item Pipline(管道)  处理引擎传过来的数据,⽐如存储需要⼿写Middlewares(下载中间件)可以⾃定义的下载扩展,⽐如设置代理  ⼀般不⽤⼿写           Spider Middlewares(中间件)可以⾃定义requests请求和进⾏response过滤⼀般不⽤⼿写

    3.Scrapy入门

    1. 创建一个爬虫项目

          在编译器或命令提示符中输入 scrapy startproject myspider(myspider是项目文件夹名称,可自定义)

    2. 生成一个爬虫

          首先进入myspider文件夹中:终端输入cd myspider

          然后输入命令 scrapy genspider douban douban.com(douban是设置的爬虫文件名称,后面是要爬取的网址域名,这里以豆瓣网为例)

    3.提取数据

           完善spider,前面我们说spider的作用是处理引擎发来的response,提取数据,提取url,并交给引擎,需要我们手动写入。可以利用xpath,css,bs4等

    4.保存数据

           在pipeline中保存数据

    5.在命令中运行爬虫

           与一般爬虫不同的是,使用scrapy来运行爬虫不能直接在编译器中点击运行,而是在终端输入:

           scrapy crawl douban(douban是爬虫文件的名称,自定义)

    6.在编译器中运行爬虫

          如果一定要在编译器直接运行爬虫也不是没有办法,我们可以新建一个py文件,在里面写入:  

    from scrapy import cmdline cmdline.execute("scrapy crawl douban".split()) # 同上,douban是爬虫的名称 #也可写为 cmdline.excute(['scrapy','crawl','douban'])

    4. pipline使用

    创建myspider时会在myspider文件夹中生成spiders文件夹(生成的douban.py就在其中)以及spipline.py文件、pipline.py文件、middlewares.py文件等。上面提到保存数据是在pipline.py文件中执行的。

    在运行pipline.py之前,我们还需要在settings.py中找到如下所示代码,将其打开(原本处于注释状态):

    从pipeline的字典形可以看出来,pipeline可以有多个,⽽且确实pipeline能够 定义多个 为什么需要多个pipeline:        1. 可能会有多个spider,不同的pipeline处理不同的item的内容        2. ⼀个spider的内容可以要做不同的操作,⽐如存⼊不同的数据库中 注意:        1. pipeline的权重越⼩优先级越⾼(假设我们再加入'dbspider.pipelines.DbspiderPipeline':301,那么按照优先级就会先执行mySpider中的spider)        2. pipeline中process_item⽅法名不能修改为其他的名称(其实也是可以修改的,但并不建议这么做)

     

    以上是对Scrapy框架的简单介绍,通过对上述内容的理解可以帮助我们简单的实现运用Scrapy来爬取信息的目的。然而仅仅是这样还不足以体现Scrapy框架的强大功能,后续将继续对Scrapy框架做拓展和实例

    有兴趣可以参考Scrapy的中文文档:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html

    官方文档也在此给出:https://docs.scrapy.org/en/latest/

    Processed: 0.016, SQL: 9