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

目录

 

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)


  异步和⾮阻塞的区别:

爬虫入门(六)——Scrapy框架初探_第1张图片

 

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

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

 

1.2 爬虫的几种工作模式

爬虫入门(六)——Scrapy框架初探_第2张图片

 

爬虫入门(六)——Scrapy框架初探_第3张图片

 

 

2. Scrapy的工作流程

 

爬虫入门(六)——Scrapy框架初探_第4张图片

 

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/

你可能感兴趣的:(python)