《Python网络爬虫技术案例教程》PPT课件(共10单元)八单元爬虫框架Scrapy

上传人:sat****105 文档编号:264193779 上传时间:2022-03-10 格式:PPTX 页数:46 大小:1.34MB
返回 下载 相关 举报
《Python网络爬虫技术案例教程》PPT课件(共10单元)八单元爬虫框架Scrapy_第1页
第1页 / 共46页
《Python网络爬虫技术案例教程》PPT课件(共10单元)八单元爬虫框架Scrapy_第2页
第2页 / 共46页
《Python网络爬虫技术案例教程》PPT课件(共10单元)八单元爬虫框架Scrapy_第3页
第3页 / 共46页
《Python网络爬虫技术案例教程》PPT课件(共10单元)八单元爬虫框架Scrapy_第4页
第4页 / 共46页
《Python网络爬虫技术案例教程》PPT课件(共10单元)八单元爬虫框架Scrapy_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《《Python网络爬虫技术案例教程》PPT课件(共10单元)八单元爬虫框架Scrapy》由会员分享,可在线阅读,更多相关《《Python网络爬虫技术案例教程》PPT课件(共10单元)八单元爬虫框架Scrapy(46页珍藏版)》请在金锄头文库上搜索。

1、爬虫框架Scrapy本章导读8第章虽然利用前面所学知识也可以实现爬虫的全部流程,但是当遇到需要爬取的网页较多、数据量较大时,使用框架可以让爬虫程序更强大、更高效。本章从网络爬虫框架Scrapy的构成入手,介绍Scrapy的应用方法,包括如何创建项目、修改items脚本、创建spider脚本、修改settings脚本、运行爬虫程序、修改pipelines脚本和定制Middleware等内容。学习目标8第章 理解Scrapy框架的构成。 掌握使用Scrapy框架创建爬虫程序获取所需数据的方法。 能使用Scrapy框架编写爬虫程序爬取网站数据。目录录CONTENT028 . 2 S c r a p

2、y 应应 用018 . 1 S c r a p y 框 架图8-1 Scrapy框架Scrapy是目前Python中使用最广泛的爬虫框架,用于爬取网站数据,提取结构性的数据。简单来说,Scrapy是一个半成品,相关扩展组件多,可配置和可扩展程度非常高,可以帮助用户简单快速地实现一个网络爬虫。Scrapy框架由7个组件构成,如图8-1所示:8 . 1 S c r a p y 框 架组件功能Engine(引擎)负责处理系统的数据流、触发事务,是整个框架的核心Scheduler(调度器)负责处理所有的Request,并按照一定的方式将其进行整理、排列和入队。此外,Scheduler可以自动去除重复的

3、URL,如果特定Request的URL不需要去重也可以通过设置实现,如POST请求Downloader(下载器)负责下载网页内容Spider负责解析所有的Response,提取Item所需的数据和新的URL。用户可以在一个项目中编写多个Spider,每个负责处理一个特定(或一些)网站Item Pipeline(项目管道)负责处理Item,常见的处理有清理、验证和存储数据等Downloader Middleware(下载中间件)位于Engine和Downloader之间,可以自定义扩展下载功能,如自动更换User-Angent、设置代理IP等Spider Middleware(Spider中间件

4、)位于Engine和Spider之间,可以自定义扩展Engine和Spider间通信的功能8 . 1 S c r a p y 框 架8 . 1 S c r a p y 框 架在Scrapy中由Engine控制数据流,其工作的基本步骤如下:(1)Engine从Spider获取初始爬取列表的Request。(5)当网页下载完毕,Downloader生成该网页的Response,并将其通过Downloader Middleware提交给Engine。(2)Engine将要爬取的Request发送给Scheduler,通过Scheduler进行调度。(3)Engine向Scheduler获取下一个要爬

5、取的Request。(4)Engine将Request通过Downloader Middleware发送给Downloader。(9)重复第(2)(8)步,直到Scheduler中没有Request,Engine关闭该爬虫程序,爬取结束。(6)Engine将接收到Response通过Spider Middleware发送给Spider处理。(7)Spider解析响应,提取Item所需的数据和新的URL,并将Item和新的Request通过Spider Middleware提交给Engine。(8)Engine将Item发送给Item Pipeline,将新的Request发送给Schedule

6、r。Python提供scrapy库实现Scrapy爬虫框架,scrapy库不是Python内置的标准库,使用之前需要安装,安装方法与requests库的安装类似(请参考2.3.2节),此处不再赘述。本节以创建BaiduSpider项目为例,介绍使用Scrapy框架编写爬虫程序的过程。8 . 2 S c r a p y 应应 用Scrapy应用scrapy库提供了startproject命令用于创建一个爬虫项目,其语法格式如下:8 . 2 S c r a p y 应应 用8.2.1 创建项目scrapy startproject project_dir(1)project_name:表示创建的爬

7、虫项目名称。(2)project_dir:表示存放爬虫项目的路径。指定该参数后,会在project_dir目录下生成一个名为project_name的文件夹;如果不指定该参数,则将在命令执行路径下生成。Scrapy的命令须通过命令行运行,在PyCharm中,可以通过Terminal窗口来运行。例如,在“D:PycharmProjects第8章”下,创建一个名为“BaiduSpider”的爬虫项目,其过程为:启动Pycharm,在界面的下方单击“Terminal”按钮,然后在打开的Terminal窗口中切换至“D:PycharmProjects第8章”,输入“scrapy startprojec

8、t BaiduSpider”命令并运行,如图8-2所示。8 . 2 S c r a p y 应应 用8.2.1 创建项目图8-2 创建“BaiduSpider”爬虫项目项目目录结构创建项目后,在“D:PycharmProjects第8章”下会生成一个名为“BaiduSpider”的文件夹,其目录结构见图8-2。其中每个文件的功能如表8-1所示。8 . 2 S c r a p y 应应 用8.2.1 创建项目表8-1 Scrapy爬虫项目的文件功能文 件说 明spiders创建Scrapy项目后自动创建的一个文件夹,用于存放用户编写的spider脚本,每一个脚本都是一个文件_init_.py空文

9、件,将其上级目录变成一个模块items.py定义Item中数据的结构,可以包含多个Itemmiddlewares.py根据需求定义Downloader Middleware和Spider Middleware,可以包含多个Middlewarepipelines.py根据需求定义Pipeline,可以包含多个Pipelinesettings.py定义项目的全局变量scrapy.cfgScrapy项目的配置文件,定义项目的配置文件路径、部署相关信息等scrapy库提供Item对象来实现将爬取到的数据转换成结构化数据的功能。实现方法是定义Item类(继承scrapy.Item类),并定义类中的数据类

10、型为scrapy.Filed字段。BaiduSpider项目中items脚本的模板如图8-3所示。8 . 2 S c r a p y 应应 用8.2.2 修改items脚本图8-3 items脚本模板BaiduSpider项目爬取的目标是百度首页热榜新闻,包括排名、标题、链接和搜索结果个数。根据项目目标,重新定义Item,在items.py中添加如下代码:8 . 2 S c r a p y 应应 用8.2.2 修改items脚本class NewsItem(scrapy.Item):#定义NewsItem类 index = scrapy.Field()#定义排名 title = scrapy.

11、Field()#定义标题 link = scrapy.Field()#定义链接newsNum = scrapy.Field()#定义搜索结果个数scrapy库提供了genspider命令用于创建一个spider脚本,其语法格式如下:8 . 2 S c r a p y 应应 用8.2.3 创建spider脚本scrapy genspider template 表示创建模板的类型,缺省则使用默认模板template表示要爬取网站的域名domain表示创建的spider脚本名称,创建后会在spiders目录下生成一个以name命名的.py文件name8 . 2 S c r a p y 应应 用8.2

12、.3 创建spider脚本在BaiduSpider项目中创建一个爬取百度首页热榜新闻的spider脚本,命名为news,域名为,其过程为:输入“cd BaiduSpider”命令并运行,切换到“BaiduSpider”目录下;然后输入“scrapy genspider news ”命令并运行,创建一个spider脚本,如图8-4所示。图8-4 创建spider脚本8 . 2 S c r a p y 应应 用8.2.3 创建spider脚本创建spider脚本后,在spiders目录下生成了一个名为“news.py”的文件,其模板见图8-4。在该文件中定义了一个NewsSpider类,其中包含三

13、个属性和一个方法,它们的说明如下。在同一个项目中,名字是唯一的,用来区分不同的spidernamespider初始爬取的URL列表,可以根据需要编辑或添加start_urls允许爬取的域名,如果初始或后续请求的URL不是这个域名下的,则请求会被过滤掉,可以根据需要编辑或添加allowed_domains解析返回的响应,提取数据或新的URL,response是请求start_urls后返回的响应parse(self,response)由于scrapy库支持CSS选择器、XPath选择器和正则表达式,所以解析响应时可以调用xpath()、css()等方法提取数据。调用方法后返回的数据是Select

14、orList类型,并不是真正的文本内容。此时,可以使用extract()方法(返回列表)或extract_first()方法(返回列表的第一个元素)来提取所需数据。8 . 2 S c r a p y 应应 用8.2.3 创建spider脚本Request(url,callback,method=GET,headers,body,cookies,meta,encoding=utf-8,priority=0,dont_filyer=False,errback,flags)如果想要请求新的URL,Scrapy可以调用Request()方法来实现,其语法格式如下:8 . 2 S c r a p y 应

15、应 用8.2.3 创建spider脚本其中常用的参数及说明如表8-2所示。表8-2 Request方法常用的参数及说明参 数说 明url接收str,表示请求的网址,无默认值callback接收同一个类中的方法,表示回调的方法,解析该请求返回的响应,未指定则继续调用parse方法,无默认值method 接收str,表示请求的方法,默认为“GET”headers 接收str、dict和list,表示请求头,无默认值cookies接收list和dict,表示请求的cookies,无默认值meta接收dict,表示Request.meta属性的初始值,如果指定了该参数,dict将会浅拷贝,无默认值8

16、. 2 S c r a p y 应应 用8.2.3 创建spider脚本在BaiduSpider项目中,实现news爬虫的过程如下:(1)在parse()方法中提取百度首页热榜新闻的排名、标题和链接,并写入NewsItem类的对象中;然后调用Scrapy.Request()方法请求新的链接,并使用callback参数指定回调方法为parse_newsnum,使用meta参数在两个解析方法之间传递NewsItem类的对象。(2)定义parse_newsnum()方法,解析请求新的链接返回的响应,提取每条新闻的搜索结果数,并写入NewsItem类的对象中。8 . 2 S c r a p y 应应 用8.2.3 创建spider脚本news.py修改后的代码如下(详情见P202P203):import scrapy#导入scrapy模块#导入items模块中的NewsItem类from BaiduSpider.items import NewsItemfrom copy import deepcopy#导入deepcopy模块class NewsSpider(scrapy.Spider):#

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号