python爬虫入门笔记-lesson17

论坛 期权论坛 期权     
ponder2019   2019-7-7 23:20   2008   0
这是python网络爬虫与信息提取课程的随堂笔记,对应课程可以去中国大学MOOC查看学习。
lesson17:Scrapy网络爬虫框架5+2结构、三条主要的数据流路径、框架功能解析、requests库VSScrapy库、Scrapy爬虫常见命令


#引言#



Scrapy不是一个简单的函数功能库 ,而是一个功能强大并且非常快速的网络爬虫框架,是python基于网络爬虫的重要技术路线。是非常优秀的python第三方库。

爬虫框架是实现爬虫功能的一个软件结构和功能组件集合。(首先它是一个结构,并且其中包含了很多操作的功能)
爬虫框架是一个半成品(可以直接使用),它能根据用户需求,帮助用户快速实现专业网络爬虫。这种框架约束了一个使用的模板,用户就知道对于一个网络爬虫该怎么操作这个模板。




#Scrapy网络爬虫框架结构#
scrapy框架一共包含7个部分(又称5+2结构)

主体部分(5个)
分别是:ENGINE模块、SCHEDULER模块、ITEM PIPELINES模块、SPIDERS模块和DOWNLOADER模块

另外包含两个中间键模块MIDDLEWARE
分别位于ENGINE与SPIDERS中间和ENGINE与DOWNLOADER之间。





#Scrapy框架三条主要的数据流路径#

第一条主要数据流路径(黄色箭头):从SPIDERS模块,经过ENGINE到达SCHEDULER;


其中ENGINE从SPIDERS获得了爬取用户的请求REQUESTS(可以把请求REQUESTS简单的理解为一个url)。SCHEDULER模块负责对爬取请求进行调度。


第二条主要数据流路径(蓝绿色箭头):从SCHEDULER模块,通过ENGINE到达DOWNLOADER模块。并且最终数据经过ENGINE返回到SPIDERS模块。


首先ENGINE模块从SCHEDULER获得下一个要爬取的网络请求,这个时候的网络请求是真实的要去网络上爬取的请求;ENGINE获得这样的请求后通过中间键发送给DOWNLOADER模块。DOWNLOADER拿到这样的请求后,真实的链接互联网并且爬取相关网页;之后DOWNLOADER将爬取到的内容封装形成一个对象RESPONSE,通过中间键和ENGINE最终发送给SPIDERS。

在这条路径中:一个真实的爬取url的请求经过SCHEDULER、DOWNLOADER最终返回了相关内容到达SPIDERS。


第三条主要数据流路径(粉色箭头):从SPIDERS模块经过ENGINE模块,到达ITEM PIPELINES模块以及SCHEDULER模块。



首先SPIDERS处理从DOWNLOADER获得的RESPONSE(即从网页中爬取的相关内容),处理后产生了两个数据类型:一个数据类型叫爬取项Scrapy ITEMS(简称ITEMS);另外一个数据类型是新的爬取请求,即我们从网络上获得这个网页之后,如果这个网页中有其他的链接也是我们十分感兴趣的,那么可以在SPIDERS中增加相关的功能,对新的连接发起再次爬取。

SPIDERS生成了这两个数据类型后将他们发送给ENGINE模块,ENGINE将其中的ITEMS发送给ITEMPIPELINES;将其中的REQUESTS发送个SCHEDULER进行调度。从而为后期的数据处理以及再次启动网络爬虫请求提供了新的数据来源。




Scrapy框架一共有这三条数据流的主要路径,在这些路径中ENGINE控制着各个模块的数据流,并且它不断地从SCHEDULER获得真实要爬取的请求并且将这个请求发送给DOWNLOADER。

整个框架的执行,从向ENGINE发送第一个请求开始,到获得所有链接的内容,并将内容处理后放到ITEM PIPELINES结束。
所以这个框架的入口是SPIDERS,这个框架的出口是ITEM PIPELINE



Scrapy是5+2结构,其中的ENGINE、SCHEDULER和DOWNLOADER这三个模块是已有的功能实现,用户不需要去编写它们。用户需要编写的是SPIDERS模块和ITEM PIPELINES模块。其中SPIDERS模块用来向整个框架提供要访问的url链接,同时要解析从网络上获得的页面的内容。而ITEM PIPELINE模块负责对提取的信息进行后处理。




由于在这个框架下,用户编写的并不是完整的或是大片的代码,而仅仅是对SPIDERS和ITEM PIPELINES中已有的代码模板进行编写。所以我们也将这种代码编写方式叫做配置
相当于用户在Scrapy爬虫框架下,经过简单的配置就可以实现这个框架的运行功能,并且最终完成用户的爬取需求。


#Scrapy爬虫框架功能解析#




ENGINE、DOWNLOADER、ACHEDULER这三个模块都不需要用户修改,但他们放在一起却形成了一个功能:由SCHEDULER发生请求经过ENGINE到达DOWNLOADER。



如果用户希望对这个请求做一定的配置:
Scrapy在ENGINE和DOWNLOADER模块间增加了一个中间键Downloader Middleware;
这个中间键实现的是对ENGINE、SCHEDULER和DOWNLOADER之间的数据流进行用户可配置的控制。用户可以通过中间键的编写来修改、丢弃、新增向网络访问的请求(或网络返回的响应)。




当用户不需要对requests或response进行修改的时候,用户不需要更改这个中间键。


#重点编写模块#



SPIDERS向整个框架提供了最初始的访问链接,同时对每次爬取回的内容进行解析提取出相关数据并再次产生新的爬取请求。是整个爬虫框架最核心的模块。




如果用户需要对数据流进行一定控制,可以通过两个中间键对其中的requests、response和item进行一定的操作。


#requests库 VSScrapy库#




如果处理需要提交验证码或提交表单等请求,我们需要额外的功能库。




# 爬取速度快好还是坏要具体问题具体分析(遇到反爬技术,爬取速度太快了反而会被屏蔽ip)


编写一个爬虫该选用哪个技术路线呢?
看情况:
特别小的网页爬虫,用requests即可。
不太小的网站爬虫,用scrapy框架。

不太小的例子:比如你想实现一个爬虫,它能够持续的、不间断的或周期性的爬取一个网站的信息;并且对于这个数据的信息你希望去积累,形成自己的爬取库。这种情况建议使用Scrapy框架。
更高级的需求,比如需要自己的爬虫框架,满足更高的业务需求。这时Scrapy的5+2固定结构可能反而会成为阻碍。此时建议用requests,它更加灵活。


#Scrapy 爬虫常见命令#

Scrapy 是为持续运行设计的专业爬虫框架,它提供了相关操作的Scrapy命令行。
Anaconda Prompt(没有装anaconda的读者可以启动Windows命令台)

scrapy库的很多使用都是通过命令行来实现的。包括建立爬虫和运行爬虫。


scrapy命令行格式:
scrapy  [options] [args]
其中,scrapy的具体命令在command区域体现;

常用命令



scrapy框架下project是最大的单元,一个project相当于一个大的scrapy框架。在一个框架中可以有多个爬虫;每一个爬虫相当于框架中的一个spider模块。
在理解scrapy常用命令时,我们需要知道project和spider的不同。


##

scrapy是一个后台的爬虫框架。命令行(而不是图形界面),更容易自动化,适合脚本控制。(命令行可以让程序员更加方便的编写自动化的脚本,对爬虫的控制和访问以及对数据的操作会更加灵活。)
只有用户才会关心图形界面;程序只关心一个个指令,只要通过命令行指令就会被程序接收;本质上,scrapy库是给程序员使用的,而不是给最终用户使用的,所以功能(而不是界面)更重要。
##


# 今日汇总 #
Scrapy框架5+2结构及模块功能、
三条数据流路径、
requests库对比Scrapy库、
Scrapy爬虫常见命令、project&spider




Photo byDylan Mcleod on Unsplash

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:5
帖子:1
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP