深入学习Python爬虫框架之Scrapy

什么是框架:

框架是一个基本概念上的结构,用于去解决或者处理复杂的问题。通俗来说也就是一个有约束性的架子

  • 在我们计算机领域中,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构。所以,Python的爬虫框架就是一些爬虫项目的半成品。比如可以将一些常见爬虫功能的实现代码部分写好,然后留下一些接口,在做不同的爬虫项目时,我们只需要根据需求去编写少量需要变动的代码,实现一个爬虫项目。所谓的半成品并不是没有完善的复用代码,在框架中已经实现了很多要实现的常见功能,让我们可以高效的开发自己需要的爬虫项目。

认识Scrapy框架:

scrapy框架是一套比较成熟的python爬虫框架,是使用python开发的快速、高层次的信息爬取框架。
Scrapy框架的应用领域很多,比如网络爬虫开发、数据挖掘、数据监测。自动化测试等。
Scrapy的官网地址是: http://scrapy.org
至于安装的话可以自己在百度搜索,很多的
我们直接开始创建吧!
cmd命令 :

scrapy startproject first_get

first_get是我创建的项目名称
在这里插入图片描述
进入文件夹查看
在这里插入图片描述
我们在用命令生成一个项目的时候,会生成一个与爬虫项目名称同名的文件夹。比如此时我们的爬虫项目名称为first_get,所以此时,会有一个名为first_get的子文件夹,和一个scrapy.cfg文件。

该同名子文件夹里面放置的是爬虫项目的核心代码,scrapy.cfg文件主要是爬虫项目的配置文件。
该项目中同名子文件夹里放置的核心代码,一个spiders,一个__init__.py,items.py,pipelines.py,settings.py,等python文件。

  • init.py 文件是项目的初始化文件,主要写的是一些项目的初始化信息。主要对spiders进行初始化
  • items.py文件为爬虫项目的数据容器文件,主要用来定义我们要获取的数据信息。
  • pipelines.py文件为爬虫项目的管道文件,主要用来对items里面定义的数据进行进一步的加工与处理。
  • settings.py 文件为爬虫项目的甚至文件,主要为爬虫项目的一些设置信息。
  • spiders文件夹下放置的是爬虫项中的爬虫部分相关的文件。

修改项目参数:

接下来我们来开始第一个项目。进行Scarpy的爬虫项目管理。
首先我们用cmd命令CD到项目中
命令查看帮助文档

scrapy startproject -h

在这里插入图片描述
–logfile=FILE 参数主要用来指定日志文件,其中的FILE为指定的日志文件的路径地址。
比如我们希望将日志文件储存在当前目录的上一层目录下,并且日志文件名为logf.txt.我们可以这样实现:

scrapy startproject --logfile="…/logf.log" mypjt

在这里插入图片描述在这里插入图片描述 还有其他的命令,如下(不多讲)
1.显示爬虫爬取的过程

scrapy fetch “爬取的链接”

2.通过Scrapy中的runspider命令我们可以实现不依托Scrapy的爬虫项目,直接运行一个爬虫文件。

scrapy runspider “爬虫文件”

3.shell命令主要是可以启动Scrapy的交互终端。经常在开发以及调试的时候用到,使用Scrapy的交互终端可以在不启动Scrapy爬虫的情况下,对网站响应进行调试,同样,在该交互终端中,我们也可以写一些python代码进行响应测试

scrapy shell “爬取的链接”

Items.py:

使用Scrapy中的Item对象可以保存爬取到的数据,相当于存储爬取到数据的容器。
我们可以定义自己所关注的结构化信息,然后从庞大的互联网信息体系中提取出我们关注度的结构化信息,这样可以更利于我们对数据的管理,提取之后,这些数据信息需要一个储存的地方,可以将提取到的结构化数据储存到Item对象中。

Spider.py:

Spider类是Scrapy中与爬虫相关的一个基类,所有的爬虫文件必须继承该类。
在一个爬虫项目中,爬虫文件是一个及其重要的部分,爬虫所进行的爬取动作以及数据提取等操作都是在该文件中进行定义和编写的。

在这里插入图片描述name属性代表的是爬虫名称。
allowed_domains代表的是允许爬行的域名。
start_urls属性代表的是爬行的起始网址

Scrapy的核心架构

在这里插入图片描述

1、Scrapy引擎:
scrapy引擎是整个scrapy架构的核心,负责控制整个数据处理流程,以及一些事物吃力。scrapy引擎与调度器、实体管道、中间件、下载器等组件都有关系,其出入整个框架的中心位置,对各项组件进行控制及协调。

2、调度器:
调度器主要实现储存待爬取的网址,并确定这些网址的优先级,决定下一次爬取哪个网址等。调度器会从引擎中接收request请求并存入优先队列中。

3、下载器:
下载器主要实现对网络上要爬取的网页资源进行高速下载,由于该组件需要通过网络进行大量数据的传输,所以该组件的压力负担也会比其他的多。下载器下载了对应的网页资源后,也会将这些数据传递给Scrapy引擎,再由Scrapy引擎传递给对应的爬虫进行处理。

4、下载中间件:
下载中间件是处于下载器和引擎之间的一个特定的组件。是用于全局修改Scrapy request和response的一个轻量、底层的系统。

5、蜘蛛spider:
spider是定义如何抓取某个网站(或一组网站)的类,包括如何执行抓取(即关注链接)以及如何从其网页中提取结构化数据(即抓取项目)。换句话说,Spider是您定义用于为特定网站(或在某些情况下,一组网站)抓取和解析网页的自定义行为的位置。

6、爬虫中间件:
爬虫中间件是处于Scrapy引擎与爬虫组件之间的一个特定的组件,主要用于对爬虫组件和Scrapy引擎之间的通信进行处理。同时,在爬虫中间件中可以加入一些自定义代码,很轻松的实现Scrapy功能的扩展。
7、实体管道:
实体管道主要用于接收从蜘蛛组件中提取出来的项目。接收后,会对这些item进行对应的处理。常见的处理主要由:清洗、验证、储存到数据库中。

在这里插入图片描述1、将网址传递给scrapy引擎。
2、scrapy引擎将网址传给下载中间件
3、下载中间键将网址给下载器
4、下载器像网址发送request请求进行下载
5、网址接收请求,将响应返回给下载器
6、下载器将收到的响应返回给下载中间件
7、下载中间件与scrapy引擎通信
8、scrapy将response响应信息传递给爬虫中间件
9、爬虫中间件将响应传递给对应的爬虫进行处理
10、爬虫处理之后,会提取出来的数据和新的请求信息,将处理的信息传递给爬虫中间件
11、爬虫中间件将处理后的信息传递给Scrapy引擎
12、scrapy接收到信息之后,会将项目实体传递给实体管道进行进一步处理,同时将新的信息传递给调度器。
13、随后再重复执行1-12步,一直到调度器中没有网址或异常退出为止。

Scrapy 的优缺点?

(1)优点:scrapy 是异步的
采取可读性更强的 xpath 代替正则强大的统计和 log 系统,同时在不同的 url 上爬行支持 shell 方式,方便独立调试写 middleware,方便写一些统一的过滤器,通过管道的方式存入数据库
(2)缺点:基于 python 的爬虫框架,扩展性比较差
基于 twisted 框架,运行中的 exception 是不会干掉 reactor,并且异步框架出错后是不会停掉其他任务的,数据出错后难以察觉。
scrapy去重原理
对于每一个url的请求,调度器都会根据请求得相关信息加密(request_fingerprint)得到一个指纹信息,并且将指纹信息和set()集合中的指纹信息进行比对,如果set()集合中已经存在这个数据,就不在将这个Request放入队列中。如果set()集合中没有存在这个加密后的数据,就将这个Request对象放入队列中,等待被调度。
这里两个条件控制:
首先是dont_filte如果是 False、是要筛选的。
然后request_seen()在默认内置的筛选方法中,就是 RFPDupeFilter()中的方法,检查 request 是否已经存在。只有要筛选且没有见过这个 request,才会去筛选 url。

借鉴文章链接:https://blog.csdn.net/weixin_43582101/article/details/89494970

Guess you like

Origin blog.csdn.net/qq_43454410/article/details/106405236