Scrapy库的安装,Scrapy爬虫框架简介

Scrapy不只是一个函数功能库,更是一个功能强大的网络爬虫框架。

1:Scrapy库的安装

在Pycharm中,配置的是anaconda环境,file-》settings-》Project-》Project Interpreter-》+号-》搜索scrapy-》选中Specify version-》Install Package。如果出错参照博客,配置anaconda集成环境,参照博客
Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。 [1] 因为包含了大量的科学包,Anaconda 的下载文件比较大(约 531 MB),如果只需要某些包,或者需要节省带宽或存储空间,也可以使用Miniconda这个较小的发行版(仅包含conda和 Python)。Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等
测试scrapy库:
在这里插入图片描述

2:Scrapy爬虫框架的介绍

爬虫框架是实现爬虫功能的一个软件结构和功能组件集合。可以说爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫。
Scrapy爬虫框架一共包含七个部分:我们称5+2结构,其中有五个部分是主体部分,另外包含两个中间件。
五个主体部分:
在这里插入图片描述
两个中间件:
在这里插入图片描述
Scrapy框架包含三条主要的数据流路径:
(1):从SPIDERS模块经过ENGINE到达SCHRDULER,其中ENGINE从SPIDERS中获得了爬取用户的请求,我们对这种请求叫REQUESTS,请求通过SPIDERS到达ENGINE之后,ENGINE将这个爬取请求转发给SCHEDULER模块,SCHEDULER模块负责对爬取请求进行调度。
(2):从SCHEDULER模块经过ENGINE模块到达DOWNLOADER模块,并且数据从DOWNLOADER模块经过ENGINE模块到达SPIDERS模块。首先ENGINE模块从SCHEDULER获得下一个要爬取的网络请求REQUESTS,这个时候的网络请求是真实的,要去网络上去真实爬取的请求,ENGINE获得这样请求之后通过中间件发送给DOWNLOADER模块,DOWNLOADER模块拿到这样的请求之后,真实的连接互联网,并且爬取相关的网页,爬取到网页之后,DOWNLOADER模块将爬取的内容形成,形成一个响应对象RESPONSE,将所有的内容封装成RESPONSE之后,将这个响应再通过中间件到达ENGINE,最终发送给SPIDERS,应该说在这条路径中,一个真实的爬取URL的请求,经过SCHEDULER,DOWNLOADER,最终返回了相关内容,到达了SPIDERS。
(3):从SPIDERS模块经过ENGINE模块到达ITEM PIPELINES模块以及SCHEDULER模块。首先SPIDERS处理从DOWNLOADER获得的响应RESPONSE,也就是从网络中爬取的相关内容,SPIDERS处理之后产生了两种数据类型,爬取项ITEMS,另外一个数据类型是新的爬取请求REQUESTS,也就是说我们从网络上获得一个网页之后,如果这个网页中有其他链接也是我们十分感兴趣的,那么可以在SPIDERS中增加相关的功能,对新的链接发起再次的爬取。SPIDERS生成了这两个数据类型之后,将他们发送给ENGINE模块,ENGINE模块收到了两类数据之后,将其中的ITEMS发送给ITEM PIPELINES,将其中的REQUESTS发送给SCHEDULER进行调度,从而为后期的数据处理以及再次启动网络爬虫请求提供了新的数据来源。
总结:
Scrapy框架一共有这三条数据流的主要路径,我们可以看到,在这个路径之中,ENGINE控制着各个模块的数据流,并且它不断的从SCHEDULER获得真实要爬取的请求,并且将这个请求发送给DOWNLOADER,整个框架的执行是从向ENGINE发送第一个请求开始到获得所有链接的内容,并将所有的内容处理后放到ITEM PIPELINES为止,所以我们说这个框架的入口是SPIDERS,出口是ITEM PIPELINES。在这个框架中,我们知道Scrapy框架是5+2结构,其中的ENGINE,SCHEDULER、DOWNLOADER模块都是已有的实现,用户不需要去编写它们,它们会按照既定的功能去完成它的任务。用户需要去编写的是SPIDERS模块和ITEM PIPELINES模块,其中SPIDERS模块用来向整个框架提供要访问的URL链接,同时要解析从网络上获得的页面的内容,而ITEM PIPELINES模块负责对提取的信息进行后处理。由于在这个框架下,用户编写的并不是完整的大片的代码,而仅仅是对SPIDERS和ITEM PIPELINES中已有的代码的框架或者模板进行编写,所以我们也将这种代码的编写的方式叫做配置。相当于用户在Scrapy爬虫框架下,经过简单的配置,就可以实现这个框架的运行功能,并且最终完成用户的爬取需求。
在这里插入图片描述
在这里插入图片描述

3:Scrapy爬虫框架的解析

**ENGINE:**不需要用户修改;整个框架的核心;控制所有模块之间的数据流;任何模块和模块之间的数据流动都要经过ENGINE模块的调度;根据条件触发事件
**DOWNLOADER:**根据请求下载网页;不需要用户修改。
**SCHEDULER:**对所有爬取请求进行调度管理。对于一个中规模爬虫,可能一时间有很多很多的对网络的爬取请求,那么这些请求那些该先访问,那些该后访问,这就是由SCHEDULER模块进行调度的,那么这里边的调度方法和调度功能也相对的固定,因此用户也不需要对SCHEDULER模块进行修改。
**DOWNLOADER MIDDLEWARE:**中间件实施ENGINE、SCHEDULER和DOWNLOADER之间进行用户可配置的控制。简单说就是用户可以通过这个中间件的编写来修改、丢弃、新增向网络访问的请求或者修改、丢弃、新增网路返回的响应。用户可以编写配置代码。对一般的使用,如果用户不需要对request或者response进行修改的时候,用户可以不更改这个中间件。
**SPIDERS:**解析DOWNLOADER返回的响应(RESPONSE);能够产生爬取项(scraped item);产生额外的爬取请求(Request),简单说,它向整个框架提供了最初始的访问链接,同时对每次爬取回来的内容进行解析,再次产生新的爬取请求,并且从内容中提取出相关的数据,它是整个爬虫框架最核心的单元。
**ITEM PIPELINES:**以流水线方式处理SPIDER产生的爬取项;它由一组操作顺序组成,类似流水线,二秘阁操作是一个ITEM PIPELINE类型,每组操作对ITEM进行一个处理。可能操作包括:清理、检验和查重爬取项中的HTML数据、将数据存储到数据库。需要用户编写配置代码。
**SPIDER MIDDLEWARE:**中间件,目的是对SPIDER产生的请求和爬取项的再处理;功能包括修改、丢弃、新增请求或爬取项,用户可以再中间件中编写配置代码。
总结:我们重点编写的是SPIDERS模块和ITEM PIPELINES模块,用户为了去操作其中的数据流,对数据流进行一定的控制,可以通过两个中间件,对其中的REQUESTS、RESPONSE和ITEMS做一定的操作。

4:requests库和Scrapy爬虫的比较

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5:Scrapy爬虫的常用命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在Scrapy框架下,一个工程是一个最大的单元,一个工程可以相当于一个大的Scrapy框架,而在Scrapy框架中,可以存在多个爬虫,每一个爬虫相当于框架中的一个Spider模块。

6:Scrapy爬虫的第一个实例

在这里插入图片描述
产生步骤:
步骤1:建立一个Scrapy爬虫工程,选取D://pycodes文件下创建
cd /d D:/pycodes进入pycodes文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里部署的概念是指将这样的爬虫放在特定的服务器上并且在服务器上配置好相关的操作接口,对于我们本机使用的爬虫来讲,我们不需要改变部署的爬虫文件。
在这里插入图片描述
如果我们希望优化爬虫功能,我们需要修改settings.py文件中的对应的配置项。spiders/目录下存放的是python123demo工程中所建立的爬虫。
在这里插入图片描述
在这里插入图片描述
这条代码的作用是生成一个名称为demo的爬虫 ,但这条命令的作用仅限于生成demo.py。
在这里插入图片描述
后边的python123.io是传入的allowed_domains参数,指的是这个爬虫在爬取网站的时候只能爬取这个域名以下的相关链接。
在这里插入图片描述
**start_urls:**后边以列表形式包含的一个或多个URL就是scrapy框架所要爬取页面的初始页面。
**parse():**用于处理响应,它可以解析从网络中爬取的内容并且形成字典,它同时还能够对网络中爬取的内容发现其中隐含的新的需要爬取的URL请求。
在这里插入图片描述
简化版代码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7:yield关键字的使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
只有当生成器被再次调用时,才产生下一个值,而不是一次性都产生出来。
在这里插入图片描述
Request类:
在这里插入图片描述
在这里插入图片描述
Response类:
在这里插入图片描述
在这里插入图片描述
Item类:
在这里插入图片描述
在Scrapy框架下,spider对网页相关信息获取后会提取其中的信息,把其中的信息生成键值对,并且以这种方式封装成字典,这种字典就是Item类。
在这里插入图片描述
CSS Selector:
在这里插入图片描述

7:"股票数据Scrapy爬虫"实例编写

未完待续…
参考文档:
北京理工大学 嵩天老师 中国大学慕课 Python网络爬虫与信息提取

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值