数据基础及分析 4_第1页
数据基础及分析 4_第2页
数据基础及分析 4_第3页
数据基础及分析 4_第4页
数据基础及分析 4_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

Python爬虫、数据清洗和数据可视化大数据分析大数据与人工智能技术丛书了解Scrapy定义了解Scrapy框架的安装掌握Scrapy框架的工作流程掌握Scrapy框架的实现本章学习目标第三章Scrapy爬虫3.1Scrapy爬虫概述互联网公开数据一般采用程序代码自动从目标网站获取,解析,然后存储在大数据平台供数据分析人员建立预测模型,同时大数据平台在业务系统进行展示。Scrapy可用于各种有用的应用程序,如数据挖掘,信息处理以及历史归档等,目前主要用于抓取web站点并从页面中提取结构化的数据。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。ScrapyScrapy是一个使用Python语言编写的开源网络爬虫框架,是一个高级的Python爬虫框架。通用爬虫框架图安装Scrapy框架lxml包是用来做xpath提取的,这个库非常容易安装,直接在命令行窗口中输入:pipintsalllxml。安装Scrapy框架1、下载Scrapy的whl包在网上输入下载地址:/~gohlke/pythonlibs/,进入该网站找到所需要的Scrapy的whl包。2、下载Scrapy的twiste包Scrapy依赖twiste包,同样使用whl格式的包进行安装,进入网站。/~gohlke/pythonlibs/,在网页中搜索twisted找到其对应的whl包并下载。3、下载Scrapy的lxml包安装Scrapy框架pyOpenSSL是在Python中一套基于网络通信的协议,可直接在在命令行窗口中输入:pipintsallpyOpenSSL。4、下载Scrapy的erface包erface包是Scrapy爬虫的接口库,可直接在命令行窗口中输入:pipintsallerface。5、下载Scrapy的pywin32包pywin32是一个第三方模块库,主要的作用是方便python开发者快速调用windowsAPI的一个模块库,可直接在命令行窗口中输入:pipintsallpywin32。6、下载Scrapy的pyOpenSSL包在上述包全部安装完成后,运行命令:pipinstallscrapy来安装Scrapy框架。3.2Scrapy原理Scrapy框架由ScrapyEngine、Scheduler、Downloader、Spiders、ItemPipeline、Downloadermiddlewares以及Spidermiddlewares等几部分组成从初始url开始,Scheduler会将其交给Downloader进行下载,下载之后会交给Spider进行分析,需要保存的数据则会被送到ItemPipeline,那是对数据进行后期处理。另外,在数据流动的通道里还可以安装各种中间件,进行必要的处理。因此在开发爬虫的时候,最好也先规划好各种模块。一般做法是单独规划下载模块,爬行模块,调度模块,数据存储模块。1234Scrapy框架ScrapyEngine也叫作Scrapy引擎,它是爬虫工作的核心,负责控制数据流在系统中所有组件中的流动,并在相应动作发生时触发事件。1、ScrapyEngineScheduler也叫作调度器,它从引擎接受Request并将他们入队,以便之后引擎请求它们时提供给引擎。2、SchedulerDownloader也叫作下载器,它负责获取页面数据并提供给引擎,而后提供给Spider。3、DownloaderSpiders也可叫作Spider,中文一般读作蜘蛛,它是Scrapy用户编写用于分析由下载器返回的Response,并提取出Item和额外的URL的类,每个Spider都能处理一个域名或一组域名。4、Spiders蜘蛛的整个抓取流程最后,从蜘蛛返回的项目通常会进驻到项目管道。首先获取第一个URL的初始请求,当请求返回后调取一个回调函数。第一个请求是通过调用start_requests()方法。该方法默认从start_urls中的URL中生成请求,并执行解析来调用回调函数。在回调函数中,解析网页响应并返回项目对象和请求对象或两者的迭代。这些请求也将包含一个回调,然后被Scrapy下载,然后有指定的回调处理。在回调函数中,解析网站的内容,使用xpath选择器并生成解析的数据项。Scrapy框架ItemPipelineDownloadermiddlewaresSpidermiddlewares657ItemPipeline也叫作数据管道,它的主要责任是负责处理由蜘蛛从网页中抽取的数据,它的主要任务是清洗、验证和存储数据。ItemPipelineDownloadermiddlewares也叫作下载器中间件,它是介于Scrapy引擎和调度之间的中间件,主要用于从Scrapy引擎发送到调度的请求和响应。DownloadermiddlewaresSpidermiddlewares也叫作爬虫中间件,它是介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。Spidermiddlewares在整个框架组成中,Spiders是最核心的组件,Scrapy爬虫开发基本上围绕Spiders而展开的。数据流对象在Scrapy框架中还有三种数据流对象,分别是Request、Response和Items。Request是Scrapy中的HTTP请求对象。Response是Scrapy中的HTTP响应对象。Item是种简单的容器,用于保存爬取得到的数据。Request对象用于描述一个HTTP请求,由Spider产生,Request构造函数的参数列表如下:Request(url[,callback,method='GET',headers,body,cookies,meta,encoding='utf-8',priority=0,dont_filter=False,errback])Request对象Response对象Response对象用于描述一个HTTP响应,由Downloader产生,Response构造函数的参数列表如下:Response(url[,status=200,headers=None,body=b'',flags=None,request=None])copy():返回一个新的相应。replace():返回具有相同成员的Response对象,但通过指定的任何关键字参数赋予新值的成员除外。Response对象是一个基类,根据响应内容有三个子类,分别是TextResponse、HtmlResponse和XmlResponse。TextResponse支持新的构造参数,是对Response对象的补充,TextResponse方法的参数如下:TextResponse(url[,encoding[,...]])HtmlResponse和XmlResponse两个类本身只是简单的继承了TextResponse,因此它们是TextResponse的子类。Response对象简介Response对象方法介绍Response响应子类介绍1、TextResponse子类2、HtmlResponse子类和XmlResponse子类。Select对象Scrapy中的Selector对象是基于lxml库建立的,并且简化了API接口,使用方便。Scrapy的数组组织结构是Selector,它使用xpath选择器在Response中提取数据。从页面中提取数据的核心技术是HTTP文本解析,在Python中常用的处理模块有BeautifulSoup和lxml

。BeautifulSoup

:是一个非常流行的解析库,API简单,但解析的速度慢。lxml

:是一个使用c语言编写的xml解析库,解析速度快,API相对比较复杂。0104050203Select对象在Python中创建对象有两种方式:将页面html文档字符串传递给Selector构造器方法的text参数。使用一个response对象构造Selector对象。在Scrapy中使用选择器是基于Selector这个对象,Selector对象在Scrapy中通过xpath或是css来提取数据的。selector_list=selector.xpath('//h1')#选取文档中所有的h1selector_list#其中包含两个<h1>对应的selector对象<Selectorxpath='.//h1'data='<h1>HelloWorld</h1>'<Selectorxpath='.//h1'data='<h1>HelloScrapy</h1>'在实际开发中,我们一般不需要手动创建Selector对象,在第一次访问一个response对象的Selector属性时,response对象内部会以自身为参数自动创建Selector对象,并将Selector对象缓存,以便下次使用。在使用Selector对象的时候要先使用xpath或者css选择器选中页面中要提取的数据,然后进行提取。创建对象选中数据定位xpath和css方法返回一个SelectorList对象,包含每个被选中部分对应的Selector对象,SelectorList支持列表接口,可以使用for语句迭代访问每一个Selector对象。在具体实现中,Scrapy使用css和xpath选择器来定位元素,它的基本方法如下:xpath():返回选择器列表,每个选择器代表使用xpath语法选择的节点。css():返回选择器列表,每个选择器代表使用css语法选择的节点。xpath是XML路径语言,它是一种用来确定XML文档中某部分位置的语言。表达式描述nodename选取次节点的所有子节点/从根节点选取//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。.选取当前节点..选取当前节点的父节点@选取属性此外,在xpath中可以使用谓语来查找某个特定的节点或者包含某个指定值的节点,谓语被嵌在方括号中。可以对任意节点使用谓语,并输出结果。表达式输出结果/students/student[1]选取属于students元素的第1个student元素/students/student[last()]选取属于students元素的最后1个student元素/students/student[last()-1]选取属于students元素的倒数第2个student元素/students/student[position()<2]选取最前面的1个属于students元素的student元素//student[@id]选取所有拥有名为id的属性的student元素//student[@id='00111']选取所有student元素,且这些元素拥有值为00111的id属性1234xpath定位css即层叠样式表,它的语法简单,功能不如xpath强大。当我们调用Selector对象的css方法时,内部Python库cssSelect将css转化为xpath再执行操作。表达式描述*选取所有元素E选取E元素E1,E2选取E1,E2元素E1E2选取E1后代元素中的E2元素E1>E2选取E1子元素中的E2元素E1+E2选取兄弟中的E2元素.container选取class属性为container的元素#container选取id属性为container的元素[attr]选取包含att属性r的元素[attr=value]选取包含attr属性且值为value的元素E:nth-(last-)child(n)选取E元素,且该元素必须是其父元素的第n个元素E:empty选取没有子元素的E元素E::text选取E元素的文本节点(textnode)response.css('diva::text').extract()

#

所有div下所有a的文本response.css('diva::attr(href)').extract()

#href的值response.css('div>a:nth-child(1)')

#选中每个div的第一个a

节点,会设定只在子节点中找,不会到孙节点中response.css('div:not(#container)')

#选取所有id不是container的divresponse.css('div:first-child>a:last-child')

#第一个div中最后一个acssSpider开发流程1.为Spider命名Name:2.设置爬虫的起始爬取点url=[‘https://www.meijutt.tv/’]3.实现页面的解析Parse()Name:定义名称Allowed_domains:爬取的域名列表Start_url:初始网址Crawler:定义crawler对象Setting:运行配置4.常见属性和方法实现一个Spider需要以下几步:继承scrapy.Spider。Classmeijuspider(scrapy,spider)实现页面的解析。3.3Scrapy的开发与实现要开发Scrapy爬虫,一般有以下几步:新建项目(Project):新建一个新的爬虫项目。明确目标(Ltems):明确你想抓取的目标。制作爬虫(Spider):制作爬虫开始爬取网页。存储内容(Pipeline):设计管道存储爬取内容。132401020304设置起始爬取点start_urls:定义Spider开始爬取数据的URL列表,随后生成的其它需要爬取的URL都会是从这些URL对应的页面中提取数据生成出来的。例如如下代码:

start_urls=['/new100.html']。继承scrapy.SpiderScrapy框架提供了一个Spider基类,我们编写的Spider都需要继承它,代码如下:importscrapyclass

MeijuSpider(scrapy.Spider)scrapy.Spider这个基类实现了以下功能:提供了Scrapy引擎调用的接口。提供了用户使用的工具函数。提供了用户访问的属性。实现页面的解析parse():parse方法是

Scrapy默认的解析函数,用于回调处理下载的response,它返回爬取的数据或者还有继续爬取的URL(request对象)。parse方法比较简单,只是对response调用_parse_response方法,并设置callback为parse_start_url,follow=True(表明跟进链接)。为Spider命名name:在Spider中使用属性name来为爬虫命名。该名称在项目中必须是独一无二的,不能和其他的爬虫取一个相同的名字。一般做法是以该网站(domain)来命名Spider。例如:如果Spider爬取

,该Spider通常会被命名为

mywebsite。如果没有给爬虫命名,爬虫会在初始化爬虫的时候抛出ValueError。Scrapy的开发与实现Scrapy常用命令介绍startprojectstartproject命令表示创建一个新工程,所有的爬虫程序都需要先创建新工程,语法如下:scrapystartproject<name>其中语句name表示创建工程的名称。genspidergenspider命令表示在该工程下创建一个爬虫,语法如下:scrapygenspider<name><domain>其中语句name表示爬虫的名称,domain表示要爬取的网站的域名。settingssettings命令表示获得爬虫配置信息,语法如下:scrapysettingscrawlcrawl表示运行已经创建好的爬虫,语法如下:scrapycrawl<spider>其中语句<spider>表示创建好的的爬虫名称。listlist命令表示列出工程中的所有爬虫,语法如下:scrapylistScrapy常用命令介绍startprojectgenspidersettingscrawllist12345创建一个最简单的Spider爬虫在本地选中某一文件夹,同时按住shift键右击,在弹出的对话框中选择“在此处打开命令窗口”,输入命令:scrapystartprojectmovie在创建好了Scrapy工程以后,下一步就是创建爬虫程序。输入命令:scrapygenspidermeiju该命令创建Spider爬虫,并命令为meiju【例3-1】创建一个最简单的Spider爬虫美剧天堂:www.meijutt.tv

创建工程创建爬虫程序创建一个最简单的Spider爬虫importscrapyfrommovie.itemsimportMovieItem

classMeijuSpider(scrapy.Spider):name="meiju"allowed_domains=[""]start_urls=['http://www.meijutt.tv/new100.html']

defparse(self,response):movies=response.xpath('//ul[@class="top-listfn-clear"]/li')foreach_movieinmovies:item=MovieItem()item['name']=each_movie.xpath('./h5/a/@title').extract()[0]yielditemmeiju.py1.设置Spider爬虫2.设置item模板3.设置配置文件4.设置数据处理脚本5.运行爬虫创建一个最简单的Spider爬虫items.pyimportscrapy

classMovieItem(scrapy.Item):#definethefieldsforyouritemherelike:#name=scrapy.Field()name=scrapy.Field()pipelines.pyimportjsonclassMoviePipeline(object):defprocess_item(self,item,spider):returnitemfromscrapyimportsignalsclassMovieSpiderMiddleware(object):#Notallmethodsneedtobedefined.Ifamethodisnotdefined,#scrapyactsasifthespidermiddlewaredoesnotmodifythe#passedobjects.@classmethoddeffrom_crawler(cls,crawler):#ThismethodisusedbyScrapytocreateyourspiders.s=cls()crawler.signals.connect(s.spider_opened,signal=signals.spider_opened)returnsdefprocess_spider_input(self,response,spider):#Calledforeachresponsethatgoesthroughthespider#middlewareandintothespider.#ShouldreturnNoneorraiseanexception.returnNonedefprocess_spider_output(self,response,result,spider):#CalledwiththeresultsreturnedfromtheSpider,after#ithasprocessedtheresponse.#MustreturnaniterableofRequest,dictorItemobjects.foriinresult:yieldidefprocess_spider_exception(self,response,exception,spider):#Calledwhenaspiderorprocess_spider_input()method#(fromotherspidermiddleware)raisesanexception.#ShouldreturneitherNoneoraniterableofResponse,dict#orItemobjects.passdefprocess_start_requests(self,start_requests,spider):#Calledwiththestartrequestsofthespider,andworks#similarlytotheprocess_spider_output()method,except#thatitdoesn’thavearesponseassociated.#Mustreturnonlyrequests(notitems).forrinstart_requests:yieldrdefspider_opened(self,spider):('Spideropened:%s'%)classMovieDownloaderMiddleware(object):#Notallmethodsneedtobedefined.Ifamethodisnotdefined,#scrapyactsasifthedownloadermiddlewaredoesnotmodifythe#passedobjects.@classmethoddeffrom_crawler(cls,crawler):#ThismethodisusedbyScrapytocreateyourspiders.s=cls()crawler.signals.connect(s.spider_opened,signal=signals.spider_opened)returnsdefprocess_request(self,request,spider):#Calledforeachrequestthatgoesthroughthedownloader#middleware.#Musteither:#-returnNone:continueprocessingthisrequest#-orreturnaResponseobject#-orreturnaRequestobject#-orraiseIgnoreRequest:process_exception()methodsof#installeddownloadermiddlewarewillbecalledreturnNonedefprocess_response(self,request,response,spider):#Calledwiththeresponsereturnedfromthedownloader.#Musteither;#-returnaResponseobject#-returnaRequestobject#-orraiseIgnoreRequestreturnresponsedefprocess_exception(self,request,exception,spider):#Calledwhenadownloadhandleroraprocess_request()#(fromotherdownloadermiddleware)raisesanexception.#Musteither:#-returnNone:continueprocessingthisexception#-returnaResponseobject:stopsprocess_exception()chain#-returnaRequestobject:stopsprocess_exception()chainpassdefspider_opened(self,spider):('Spideropened:%s'%)middlewares.py创建一个最简单的Spider爬虫#-*-coding:utf-8-*-#Scrapysettingsformovieproject##Forsimplicity,thisfilecontainsonlysettingsconsideredimportantor#commonlyused.Youcanfindmoresettingsconsultingthedocumentation:##/en/latest/topics/settings.html#/en/latest/topics/downloade

温馨提示

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

评论

0/150

提交评论