《Python网络爬虫基础教程》 课件-第9章 初识网络爬虫框架Scrapy_第1页
《Python网络爬虫基础教程》 课件-第9章 初识网络爬虫框架Scrapy_第2页
《Python网络爬虫基础教程》 课件-第9章 初识网络爬虫框架Scrapy_第3页
《Python网络爬虫基础教程》 课件-第9章 初识网络爬虫框架Scrapy_第4页
《Python网络爬虫基础教程》 课件-第9章 初识网络爬虫框架Scrapy_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章初识网络爬虫框架Scrapy《Python网络爬虫基础教程》学习目标/Target了解什么是Scrapy框架,能够复述出Scrapy框架的优点与缺点熟悉Scrapy框架的架构,能够归纳每个组件的功能与职责熟悉Scrapy框架的运作流程,能够归纳Scrapy框架的运作流程掌握Scrapy框架的安装方式,能够独立安装Scrapy框架,并能解决安装过程中出现的常见问题掌握Scrapy框架的基本操作,能够灵活应用Scrapy框架新建项目和制作爬虫章节概述/Summary随着网络爬虫的应用越来越多,互联网中涌现了一些网络爬虫框架,这些框架将网络爬虫的一些常用功能和业务逻辑进行了封装。在这些框架的基础上,我们只需要按照需求添加少量代码,就可以实现一个网络爬虫。Scrapy是目前比较流行的Python网络爬虫框架之一,可以帮助开发人员高效地开发网络爬虫程序。目录/Contents9.19.29.3Scrapy框架简介Scrapy框架架构Scrapy框架运作流程目录/Contents9.49.59.6Scrapy框架安装Scrapy框架基本操作实践项目:采集黑马程序员视频库的视频信息Scrapy框架简介9.1了解什么是Scrapy框架,能够复述出Scrapy框架的优点与缺点学习目标9.1Scrapy框架简介Scrapy是一个纯使用Python语言开发、开源的网络爬虫框架,用于抓取网站页面,并从页面中提取结构化数据。Scrapy最初是为了页面抓取而设计的,可以简单、快速地从网站页面中提取所需的数据,如今Scrapy具备更加广泛的用途,可以被应用到诸如数据挖掘、数据监测、自动化测试等领域以及通用网络爬虫中。9.1Scrapy框架简介Scrapy是基于Twisted框架开发的,Twisted是一个流行的基于事件驱动的网络引擎框架,采用了异步代码实现并发功能。Twisted负责处理网络通信,这样不仅加快页面的下载速度,而且减少手动实现异步操作。9.1Scrapy框架简介Scrapy框架的功能如此强大,离不开其自身具备的如下几个优点。9.1Scrapy框架简介具有丰富的文档、良好的社区以及庞大的用户群体。Scrapy支持并发功能,可以灵活地调整并发线程的数量。采用可读性很强的XPath技术解析网页,解析速度更加快速。具有统一的中间件,可以对数据进行过滤。支持Shell工具,方便开发人员独立调试程序。通过管道将数据存入数据库,灵活方便,且可以保存为多种形式。具有高度的可定制化功能,经过简单的改造后便可以实现具有特定功能的网络爬虫。9.1Scrapy框架简介虽然Scrapy框架功能强大,但自身仍存在几个缺点。自身无法实现分布式爬虫。去重效果差,极易消耗内存。无法获取采用JavaScript技术进行动态渲染的页面内容。为了弥补Scrapy框架的这些缺点产生了许多框架插件进行解决,比如,Scrapy-Redis库解决了Scrapy框架不支持分布式爬虫的问题,Scrapy-Splash库解决了Scrapy框架不支持JavaScript动态渲染的问题等。9.2Scrapy框架架构Scrapy框架的强大功能离不开众多组件的支撑,这些组件相互协作,共同完成整个采集数据的任务。Scrapy框架的架构图如下图所示。ItemPipelineDownloaderMiddlewaresSpiderMiddlewaresScrapyEngineSchedulerDownloaderSpidersScrapy框架中包含的组件。9.2Scrapy框架架构Scrapy框架中包含的组件。(1)ScrapyEngine(引擎):负责Scheduler、Spiders、ItemPipeline、Downloader这几个组件之间的通信,包括信号和数据的传递等。(2)Scheduler(调度器):负责接收ScrapyEngine发送过来的Requests(请求),并按照一定的方式进行整理排列和入队,在ScrapyEngine需要时再次将请求交还给ScrapyEngine。(3)Downloader:负责下载由ScrapyEngine发送的所有Requests,并将其获取到的Responses(响应)交还给ScrapyEngine,由ScrapyEngine交给Spiders进行处理。(4)Spiders:负责处理所有Responses,从Responses中解析并提取Items封装的数据,并将需要跟进的URL提交给ScrapyEngine,再次进入Scheduler。9.2Scrapy框架架构Scrapy框架中包含的组件。(5)ItemPipeline:负责处理Spiders中获取的Items封装的数据,并对这些数据进行后期处理,如详细分析、过滤、存储等。(6)DownloaderMiddlewares:位于Downloader和ScrapyEngine之间,可以自定义扩展下载功能的组件。(7)SpiderMiddlewares:位于Spiders和ScrapyEngine之间,可以自定义扩展ScrapyEngine和Spiders中间通信的功能组件。9.2Scrapy框架架构熟悉Scrapy框架的运作流程,能够归纳Scrapy框架的运作流程学习目标9.3Scrapy框架运作流程Scrapy框架各组件之间的运作流程9.3Scrapy框架运作流程9.3Scrapy框架运作流程(1)ScrapyEngine从Spiders中获取初始URL。(2)ScrapyEngine将初始URL封装成Requests交给Scheduler。(3)Scheduler将下一个Requests交给ScrapyEngine。(4)ScrapyEngine将Requests通过DownloaderMiddlewares转交给Downloader。(5)页面完成下载后,Downloader生成一个该页面的Responses,并将该Responses通过DownloaderMiddlewares交给ScrapyEngine。(6)ScrapyEngine从Downloader中接收到Responses,并通过SpiderMiddlewares转交给Spiders进行处理。(7)Spiders处理Responses,并将处理后的Items或新的Requests(比如在前面案例中看到的“下一页”链接)交给ScrapyEngine。(8)ScrapyEngine将处理后的Items交给ItemPipeline,将新的Requests交给Scheduler。重复步骤(1)~(8),直到Scheduler中没有新的Requests为止。Scrapy框架各组件之间的运作步骤多学一招ScrapyEngine:Hi!Spiders,你要处理哪一个网站?Spiders:老大要我处理。ScrapyEngine:你把第一个需要处理的URL给我吧。Spiders:给你,第一个URL是。ScrapyEngine:Hi!Scheduler,我这有一个请求(根据以上URL封装的Request),你帮我排序入队一下。Scheduler:好的,正在处理,你等一下。ScrapyEngine:Hi!Scheduler,把你处理好的请求给我。Scheduler:给你,这是我处理好的请求。ScrapyEngine:Hi!Downloader,你按照老大的Downloadermiddlewares的设置,帮我按这个请求下载些东西。Scrapy拟人小剧场从加粗一行的对白开始重复交流,直到处理完老大需要的全部信息。多学一招Downloader:好的,给你,这是下载好的东西(如果下载失败,则这句话会换成“Sorry,这个请求下载失败了”,然后ScrapyEngine会告诉Scheduler“这个请求下载失败了,你记录一下,我们待会儿再下载”)。ScrapyEngine:Hi!Spider,这是下载好的东西,并且按照老大的要求已被DownloaderMiddlewares处理过,你自己再处理一下。Spiders:Hi!ScrapyEngine,我这里有两个结果,一个是我需要跟进的URL,另一个是我获取的Items。ScrapyEngine:Hi!ItemPipeline,我这儿有个Items需要你,帮助处理一下!Scheduler,这是需要跟进的URL,你帮我处理下。ItemPipeline和Scheduler:好的,现在就做!Scrapy拟人小剧场掌握Scrapy框架的安装方式,能够独立安装Scrapy框架,并能解决安装过程中出现的常见问题学习目标9.4Scrapy框架安装Scrapy是一个第三方框架,如果要使用该框架开发网络爬虫程序,需要先在计算机中安装该框架。以Windows7操作系统为例,分别对安装Scrapy和常见安装问题进行介绍。9.4Scrapy框架安装由于Windows7系统默认没有安装Python,所以在安装Scrapy框架之前,需要保证Windows7系统下已经安装了Python。在命令提示符窗口中使用pip工具安装Scrapy框架。

安装Scrapypipinstallscrapy==2.5.09.4Scrapy框架安装在Windows7系统下安装Scrapy框架常见的两个问题是缺少MicrosoftVisualC++14.0组件和Twisted安装出错。error:MicrosoftVisualC++14.0isrequired.Getitwith"MicrosoftVisualC++BuildTools":/visual-cpp-build-tools缺少MicrosoftVisualC++14.0组件9.4Scrapy框架安装

常见安装问题

常见安装问题缺少MicrosoftVisualC++14.0组件若当前电脑上缺少MicrosoftVisualC++14.0组件,则可以单独安装该组件。在浏览器中进入下载MicrosoftVisualC++14.0组件的页面。完成下载后可以看到下载的安装包。双击安装包进行安装,在安装过程中全部保持默认设置即可,无须进行任何修改。需要注意的是,我们在VisualStudio2015组件安装完成之后需要重启计算机。单击下载9.4Scrapy框架安装Twisted安装出错由于Scrapy框架使用了异步网络框架Twisted,所以在安装Scrapy的过程中需要安装Twisted。若没有安装Teisted,则出现以下信息。fatalerrorC1083:Cannotopenincludefile:'basetsd.h':Nosuchfileordirectoryerror:command'C:\\ProgramFiles(x86)\\MicrosoftVisualStudio14.0\\VC\\BIN\\x86_amd64\\cl.exe'failedwithexitstatus29.4Scrapy框架安装

常见安装问题Twisted安装出错若未安装Twisted,则可以单独安装。在浏览器中访问Twisted的下载页面。pipinstallTwisted20.3.0cp36cp36mwin32.whl在Twisted下载页面中选择适合自己电脑的安装包进行安装。9.4Scrapy框架安装

常见安装问题Scrapy框架基本操作9.5使用Scrapy框架开发网络爬虫程序一般包含4个步骤,分别为新建Scrapy项目、明确采集目标、制作爬虫和永久存储数据。9.5Scrapy框架基本操作掌握爬虫项目创建的方式,能够通过Scrapy命令创建爬虫项目学习目标9.5.1新建Scapy项目新建Scrapy项目便是使用Scrapy框架的第一步,主要是将前面提过的各个组件整合到一起后,方便进行统一管理。新建Scrapy项目需要使用如下命令:9.5.1新建Scapy项目scrapystartproject项目名称例如,使用创建爬虫项目创建mySpider爬虫项目。mySpider项目的目录结构如下所示。9.5.1新建Scapy项目mySpider/:项目的Python模块,将会从这里引用代码。mySpider/spiders/:存放爬虫代码的目录。mySpider/items.py:项目的实体文件,用于定义项目的目标实体。mySpider/middlewares.py:项目的中间件文件,用于定义爬虫中间件。mySpider/pipelines.py:项目的管道文件,用于定义项目使用的管道。mySpider/settings.py:项目的设置文件,用于存储项目的设置信息。scrapy.cfg:配置文件,用于存储项目的配置信息。明确爬虫项目中明确采集目标,能够在Scrapy中添加爬取字段学习目标9.5.2明确采集目标mySpider项目要采集的目标数据是某培训公司的讲师详情页中的讲师信息,包括讲师的姓名、级别和履历。9.5.2明确采集目标方框标注出的讲师的姓名、级别和履历便是要采集的数据。Scrapy中提供了一个表示实体数据的基类scrapy.Item,用于封装这些待采集的数据,在mySpider目录下的items.py文件中MyspiderItem类中添加抓取的信息。9.5.2明确采集目标classMyspiderItem(scrapy.Item):name=scrapy.Field()#表示讲师姓名

level=scrapy.Field()#表示讲师级别

resume=scrapy.Field()#表示讲师履历掌握制作Scrapy爬虫,能够使用Scrapy提取指定数据学习目标9.5.3制作爬虫9.5.3制作爬虫制作爬虫的流程一般可以分为3步,分别是创建爬虫、抓取网页数据和解析网页数据。创建爬虫创建爬虫主要是为爬虫起一个名称,并规定该爬虫的爬取域,也就是要爬取的域名范围。scrapygenspider爬虫名称"爬取域"9.5.3制作爬虫例如,在命令行窗口中切换当前的目录为子目录mySpider/spiders,创建一个名称为itcast、爬取域为的爬虫。scrapygenspideritcast""创建爬虫在PyCharm中打开mySpider/spiders目录,可以看到新创建的itcast.py,该文件的内容已经自动生成。importscrapyclassItcastSpider(scrapy.Spider):name='itcast'allowed_domains=['']start_urls=['/']defparse(self,response):passItcastSpider是自动生成的类,它继承自scrapy.Spider类。9.5.3制作爬虫创建爬虫ItcastSpider类中包含了3个属性和1个方法,关于这些属性和方法的介绍如下。9.5.3制作爬虫name属性:表示爬虫的名称。爬虫的名称必须是唯一的,不同的爬虫需要有不同的名称。allowed_domains属性:表示爬虫搜索的域名范围。该属性用于规定爬虫只能抓取指定域名范围内的网页,忽略不属于该域名范围内的网页。start_urls属性:表示包含起始URL的元组或列表,用于指定爬虫首次从哪个网页开始抓取。parse(self,response)方法:用于解析网页数据(response.body),并返回抽取的数据或者新生成的要跟进的URL。该方法会在每个初始URL完成下载后被调用,被调用的时候传入从该URL返回的Response对象作为唯一参数。创建爬虫9.5.3制作爬虫首先对刚刚生成的ItcastSpider类进行修改,为爬虫指定要抓取的初始URL,具体代码如下。start_urls=['/channel/teacher.shtml']然后修改parse()方法,在该方法中将response中的内容写入到本地的teacher_info.txt文件中,具体代码如下。defparse(self,response):withopen("teacher_info.txt","w",encoding="utf-8")asfile:file.write(response.text)创建爬虫9.5.3制作爬虫确定了初始URL之后就可以运行爬虫,让爬虫根据该URL抓取网页数据了。运行爬虫的命令格式如下。scrapycrawl爬虫名称例如,在命令行窗口中切换当前目录为itcast.py文件所在的目录,运行爬虫itcast,命令如下。scrapycrawlitcast抓取网页数据9.5.3制作爬虫抓取网页数据mySpider/spiders目录中增加了一个teacher_info.txt文件,打开该文件后可以看到抓取到的网页源代码。teacher_info.txt文件内容如下。9.5.3制作爬虫解析网页数据在讲师详情页选中“黄老师”后右击,在弹出的右键菜单中选择“检查”,此时浏览器底部弹出开发者工具,并定位到文字“黄老师”所对应的元素。9.5.3制作爬虫解析网页数据在爬虫项目中定义解析网页数据的代码,并将解析后的数据封装成MyspiderItem类的对象,每个对象代表着一个讲师的信息。首先,在mySpider/spiders目录的itcast.py文件中,导入mySpider/items.py中定义的MyspiderItem类。frommySpider.itemsimportMyspiderItem9.5.3制作爬虫解析网页数据然后,修改ItcastSpider类的parse()方法,将解析后的目标数据封装成一个MyspiderItem对象,并且将所有的MyspiderItem对象保存到一个列表中。defparse(self,response):items=[]#存储所有讲师的信息

foreachinresponse.xpath("//div[@class='li_txt']"):

item=MyspiderItem()#创建MyspiderItem类的对象

name=each.xpath("h3/text()").extract()level=each.xpath("h4/text()").extract()resume=each.xpath("p/text()").extract()

item["name"]=name[0]item["level"]=level[0]item["resume"]=resume[0]items.append(item)

returnitems9.5.3制作爬虫解析网页数据最后,在命令行窗口中再次使用“scrapycrawlitcast”命令运行爬虫itcast,可以看到命令行窗口中打印了获取到的讲师信息。[单击查看源码]多学一招在PyCharm中执行爬虫在PyCharm中执行爬虫itcast具体步骤如下。(1)在PyCharm中打开mySpider项目,在该项目中添加一个文件start.py,文件中的内容具体如下所示:fromscrapyimportcmdlinecmdline.execute("scrapycrawlitcast".split())(2)在PyCharm中运行start.py文件,此时便可以在控制台中看到打印的讲师信息。

多学一招Scrapyshell是一个交互式终端,它可以在不启动爬虫的情况下尝试及调试爬取部分的代码,也可以测试XPath路径表达式或CSS表达式是否正确,避免每次修改表达式后运行爬虫的麻烦。ScrapyShell多学一招ScrapyShell启用ScrapyShell启用Scrapyshell的命令如下所示。scrapyshell<URL>#URL是待抓取URL地址多学一招启用ScrapyShell例如,在Windows命令行窗口中输入“scrapyshell”命令即可启用Scrapyshell访问百度首页,并且终端会输出大量提示信息。C:\Users\admin>scrapyshell2021-08-2314:54:29[scrapy.utils.log]INFO:Scrapy2.5.0started(bot:scrapybot).......(省略)2021-08-2314:54:30[scrapy.core.engine]INFO:Spideropened2021-08-2314:54:33[scrapy.core.engine]DEBUG:Crawled(200)<GET>(referer:None)表示访问网页结果为成功ScrapyShell多学一招在PyCharm中执行爬虫使用ScrapyShellScarpyshell可以看成是一个在Python终端(或IPython)基础上添加了扩充功能的Python控制台程序,这些扩充包括若干功能函数和内置对象。(1)功能函数shelp():打印可用对象和功能函数的帮助列表。fetch(request_or_url):根据给定的request或URL获取一个新的response对象,并更新原有的相关对象。view(response):使用本机的浏览器打开给定的response对象。ScrapyShell多学一招使用ScrapyShell(2)内置对象crawler:当前Crawler对象。spider:处理URL的Spider对象。request:最近获取到的页面的Request对象。response:包含最近获取到的页面的Response对象。settings:当前的Scrapysettings。ScrapyShell多学一招使用ScrapyShell(2)内置对象当Scrapyshell载入页面后,将得到一个包含Response的本地response变量。若在终端输入response.body,则可以看到response的请求数据;若在终端输入response.headers,则可以看到response的请求头;若在终端输入response.selector,则将获取一个response初始化的类Selector的对象(HTML及XML内容)。此时可以通过使用response.selector.xpath()或response.selector.css()对response进行查询。另外,Scrapy还提供了一些快捷方式,例如response.xpath()或response.css()同样可以生效。ScrapyShell掌握永久存储数据的方式,能够通过命令将数据保存到本地学习目标9.5.4永久存储数据永久存储数据是使用Scrapy框架的最后一步操作,主要是对获取的目标数据进行永久性存储。Scrapy中主要有4种方式简单保存数据,这4种方式都是在运行爬虫的命令后面加上-o选项,通过该选项输出指定格式的文件。9.5.4永久存储数据#输出JSON格式,默认为Unicode编码scrapycrawlitcast-oteachers.json#输出JSONLines格式,默认为Unicode编码scrapycrawlitcast-oteacher

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论