大数据采集与预处理技术(微课版)课件 4.1图书信息数据采集-scrapy_第1页
大数据采集与预处理技术(微课版)课件 4.1图书信息数据采集-scrapy_第2页
大数据采集与预处理技术(微课版)课件 4.1图书信息数据采集-scrapy_第3页
大数据采集与预处理技术(微课版)课件 4.1图书信息数据采集-scrapy_第4页
大数据采集与预处理技术(微课版)课件 4.1图书信息数据采集-scrapy_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

大数据采集与预处理技术*

*项目二图书信息数据采集与预处理序号软件配置要求1scrapy最新版本2redis最新版本一、项目目标:1、完成图书信息数据分布式采集环境安装配置;2、完成图书信息数据采集程序设计和数据采集;3、完成图书信息数据预处理清洗。4、完成图书信息数据文本标注。二、环境要求:任务一分布式采集环境安装配置一、任务目标1、掌握Scrapy和Scrapy-redis组件的安装配置方法;2、了解Scrapy的工作机制和常见程序编写;3、会使用Scrapy-redis编写数据抓取程序;4、掌握常见的自然语言公开数据集获取方法;5、编写分布式爬虫程序完成图书信息数据采集。二、Scrapy爬虫框架1、简介:Scrapy是一个用于爬取网站并从页面中提取结构化数据的开源和协作框架,被广泛应用于数据挖掘、信息处理或存储历史数据等领域。ScrapyEngineSchedulerItemPipelineDownloaderSpiderSpiderMiddleware

DownloaderMiddleware

返回responses给Spider发送Items发送Requests发送Requests用于存放URL存放数据队列提取数据、URL发送请求自定义设置自定义请求①ScrapyEngine:控制整个系统的数据流处理,负责Spider、ItemPipeline、Downloader、Scheduler之间通讯、信号、数据传递等。②Spider:用来定义要爬取的网站、如何解析网页内容等,从引擎接收URL并返回解析结果,处理所有Responses,获取Item字段,将需要跟进的URL提交给引擎,再次进入调度器。③Scheduler:负责接收引擎发送过来的请求,管理待执行的请求队列,决定下一个请求是什么,确保每个请求都只执行一次。④ItemPipeline:Item定义了要抓取的数据结构,类似于Python字典。Pipeline在Spider之后执行,对Spider返回结果处理,包括清理、存储等。⑤DownloaderMiddleware:即下载中间件,主要功能是处理ScrapyEngine与Downloader之间的请求及响应⑥Downloader:在Scheduler发送Request给Downloader之前修改Request,在Response发送到Spider之前对其进行修改,负责下载网页内容,并将下载的内容返回给Spider。⑦SpiderMiddleware:可以自定义扩展ScrapyEngine和Spiders中间通信的功能组件,用来处理Spiders输入的响应和输出的请求。2、安装:pipinstallscrapy-i/simple使用如下命令测试是否正确安装:scrapyversion3、scrapy爬取数据步骤1、创建项目2、编写爬虫3、运行爬虫4、提取数据scrapystartprojectmyproject1)__init__.py:用于标识该目录为Python包,可以包含项目的初始化代码。2)Items.py:定义数据结构的文件,通常在这里创建Item类,用于存储爬取到的数据字段。3)Middlewares.py:包含自定义的请求和响应处理逻辑,用于修改请求、处理响应、处理错误等。4)Pipelines.py:负责处理爬取到的数据,例如清洗、验证和存储到数据库或文件中。5)Settings.py:项目的设置文件,用于配置全局选项,如用户代理、延迟、并发请求数等。6)Scrapy.cfg:项目配置文件,定义项目的路径和部署信息,方便管理多个Scrapy项目。7)Spiders:spiders目录是放置爬虫程序的,例如编写爬取网站规则。1、创建项目2、编写爬虫3、运行爬虫4、提取数据1)进入项目目录cdmyproject2)创建爬虫,“example”是爬虫名称,是目标网站。scrapygenspiderexample3)定义Itemimportscrapy#自动生成的ltem类classMyspiderItem(scrapy.Item):#definethefieldsforyouritemherelike:#name=scrapy.Field()pass#自定义类classMyItem(scrapy.Item):title=scrapy.Field()time=scrapy.Field()4)创建spiders/example.py文件,修改parse方法,定义如何提取数据,须继承“scrapy.Spider”类,并且需要定义以下三个属性:name:爬虫的名字,属于必须定义字段,可以使用要爬取的网站名。start_urls:初始的UR列表,也就是要爬取网站,是数组类型。parse(self,response):每个初始的URL完成下载后都调用该函数,解析返回的网页数据,然后生成下一页的请求URL。#导入自定义的Item数据结构(以豆瓣图书为例)frommyproject.itemsimportMyItemclassExampleSpider(scrapy.Spider):name='example’ #爬虫名字start_urls=['/'] #初始URL列表defparse(self,response):item=MyItem() #使用xpath获取要爬取的字段title=response.xpath('//div[@class="nav-logo"]/a/text()').get()item['title']=title[0]print(item['title'])1、创建项目2、编写爬虫3、运行爬虫4、提取数据5)在项目根目录下,例如本例中需要先使用“cdmyproject”切换目录,再运行以下命令启动爬虫:scrapycrawlexample执行过程:Scrapy会为Spider的start_urls属性中的每个URL创建scrapy.Request对象,并将parse方法作为回调函数赋值给Request。Request对象经过调度,生成scrapy.http.Response对象并送回给parse()方法。如果要将提取的数据保存到文件中,可以使用命令:scrapycrawlexample-ooutput.json在python代码中执行使用如下代码:if__name__=='__main__':fromscrapyimportcmdlinecmdline.execute(f'scrapycrawlbookinfo'.split())#格式cmdline.execute(f'scrapycrawl{ExampleS}'.split())6)项目设置有些网站会对爬虫做限制,需要在settings.py文件做设置以规避限制。常见设置如下:BOT_NAME=“myproject” #项目名称,自动生成SPIDER_MODULES=[‘myproject.spiders’] #

spider所在路径NEWSPIDER_MODULE=‘myproject.spiders’ #新spider默认所在路径DOWNLOAD_DELAY=2 #每次请求之间等待时间(秒)RANDOMIZE_DOWNLOAD_DELAY=True #DOWNLOAD_DELAY上随机添加一个范围为0.5倍的延迟,防止被目标网站识别为爬虫CONCURRENT_REQUESTS=3 #控制Scrapy并发请求的数量CONCURRENT_REQUESTS_PER_DOMAIN=4#每个域名的并发请求数量限制CONCURRENT_REQUESTS_PER_IP=4 #每个IP的并发请求数量限制DEFAULT_REQUEST_HEADERS={ #设置全局的默认请求头'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/534.57.2(KHTML,likeGecko)Version/5.1.7Safari/534.57.2',"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language":"en",……} 没有爬到数据?反爬机制,没有设置User-agent1、创建项目2、编写爬虫3、运行爬虫4、提取数据6)项目设置settings.py。常见设置如下:USER_AGENT=‘Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/87.0.4280.88Safari/537.36’ #请求设置USER_AGENT_LIST=[ #一个浏览器可能被禁止,可以改使用一个用户代理列表'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/87.0.4280.88Safari/537.36','Mozilla/5.0(Macintosh;IntelMacOSX10_15_7)AppleWebKit/605.1.15(KHTML,likeGecko)Version/14.0.3Safari/605.1.15',...]RETRY_ENABLED=True #启用请求重试机制,处理超时、服务器错误等情况RETRY_TIMES=3 #RETRY_TIMES=3DOWNLOAD_TIMEOUT=15 #设置下载超时时间,单位为秒DEPTH_LIMIT=3 #限制爬取的页面深度,url中的链接还有子连接,这里是最多几层子连接DEPTH_PRIORITY=1 #使用优先级队列处理请求,深度优先级COOKIES_ENABLED=True #设置是否启用Cookies,默认为启用COOKIES_DEBUG=True #显示Cookies调试信息,用于调试与目标网站的Cookies交互LOG_LEVEL='INFO' #设置日志输出级别,可选择DEBUG、INFO、WARNING、ERROR、CRITICALHTTP_PROXY='xy.server:port' #代理设置HTTPS_PROXY='xy.server:port' #代理设置#其他设置还包括下载器中间件DOWNLOADER_MIDDLEWARES,爬虫中间件SPIDER_MIDDLEWARES设置,请参考配套教材选择是否使用。1、创建项目2、编写爬虫3、运行爬虫4、提取数据7)数据封装Item类用于定义和封装爬虫提取的数据结构,定义在Scrapy项目的items.py文件中,可以将爬虫从网页提取的数据字段定义在该类中。例如,定义Item类如下:classBookItem(scrapy.Item):#定义字段

name=scrapy.Field() #书的名称

price=scrapy.Field() #书的价格url=scrapy.Field() #书的链接scrapy.Field():每个Item的字段使用scrapy.Field()来定义,它本质上是一个占位符,可以存储任何类型的数据,如字符串、数字、列表、字典等。1、创建项目2、编写爬虫3、运行爬虫4、提取数据使用Item类:frommyproject.itemsimportBookItem

classBookinfoSpider(scrapy.Spider):name="bookinfo"allowed_domains=[""]start_urls=[‘/latest?subcat=%E5%85%A8%E9%83%A8’]#初始URL列表,“subcat=全部”

item=BookItem()defparse(self,response):books=response.xpath('//li[@class="mediaclearfix"]')forbookinbooks:self.item['name']=book.xpath('./div[@class="media__body"]/h2/a/text()').get()self.item['price']=book.xpath('./div[@class="media__body"]/div//a/text()').get()self.item['url']=book.xpath('./div[@class="media__body"]/h2/a/@href').get()#将封装好的item返回给管道,通过yield语句将item返回给ItemPipeline处理yieldself.itemif__name__=='__main__':fromscrapyimportcmdlinecmdline.execute(f'scrapycrawlbookinfo'.split())1、创建项目2、编写爬虫3、运行爬虫4、提取数据定义Item类(更新):可以在Field()中添加元数据,这些元数据不会影响爬虫的行为,但可以用于说明字段的用途或存储相关信息。classBookItem(scrapy.Item):name=scrapy.Field(serializer=str)#指定序列化方式

price=scrapy.Field(description="priceinUSD")#添加描述url=scrapy.Field(output_processor=str.upper)#定义输出处理器定义ItemPipeline处理逻辑。在pipelines.py中,可以定义对Item进行处理的管道,例如数据清洗、保存等。classBookPipeline:defprocess_item(self,item,spider):#对价格字段进行清洗item['price']=float(item['price'].replace('$',''))#将数据打印、存储到数据库或文件#...returnitem1、创建项目2、编写爬虫3、运行爬虫4、提取数据多级嵌套Item类(更新):某个Item的字段本身也是一个定义的Item类型,这在实际当中较常见。如下例子中,BookItem包含了一个reviews字段,该字段可以是一个ReviewItem列表,表示用户对书的评价。importscrapyclassReviewItem(scrapy.Item):rating=scrapy.Field()comment=scrapy.Field()classBookItem(scrapy.Item):#定义字段

name=scrapy.Field() #书的名称

price=scrapy.Field() #书的价格

url=scrapy.Field() #书的链接

reviews=scrapy.Field() #评价,嵌套ReviewItem1、创建项目2、编写爬虫3、运行爬虫4、提取数据多级嵌套Item类使用:classBookinfoSpider(scrapy.Spider):name="bookinfo"allowed_domains=[""]start_urls=['/latest?subcat=%E5%85%A8%E9%83%A8']#初始URL列表

item=BookItem()defparse(self,response):books=response.xpath('//li[@class="mediaclearfix"]')forbookinbooks:self.item['name']=book.xpath('./div[@class="media__body"]/h2/a/text()').get()self.item['price']=book.xpath('./div[@class="media__body"]/div//a/text()').get()self.item['url']=book.xpath('./div[@class="media__body"]/h2/a/@href').get()review_item=ReviewItem()review_item['rating']=book.xpath('./div[@class="media__body"]//span[@class="font-smallfleft"]/text()').get()review_item['comment']=book.xpath('./div[@class="media__body"]//span[@class="fleftml8color-gray"]/text()').get()#将封装好的item返回给管道,通过yield语句将item返回给ItemPipeline处理self.item['reviews']=review_itemyieldself.itemif__name__=='__main__':fromscrapyimportcmdlinecmdline.execute(f'scrapycrawlbookinfo'.split())1、创建项目2、编写爬虫3、运行爬虫4、提取数据8)中间件Scrapy中间件(Middleware)是在Scrapy执行请求和响应的过程中,用于对请求、响应和其他数据进行处理的组件。中间件处于引擎和爬虫之间,提供了钩子函数,允许在请求发出或响应接收前后进行修改和处理。包括:①DownloaderMiddlewares(下载器中间件):处理请求和响应的流动,位于Scrapy引擎和下载器之间。可以用它来修改请求头、处理代理、处理重定向等。其主要钩子方法包括:process_request(self,request,spider):在Scrapy调度器将request传递给下载器之前被调用。可以修改请求,添加自定义请求头、代理等。process_response(self,request,response,spider):在Scrapy从下载器接收到响应后调用。可以在此处理或修改响应,然后再传递给爬虫。process_exception(self,request,exception,spider):当下载器或中间件在处理请求时抛出异常时调用。②SpiderMiddlewares(爬虫中间件):处理爬虫和引擎之间的输入输出,位于Scrapy引擎和爬虫之间。用它来修改或过滤从响应生成的Item或Response,或者处理爬虫生成的Response。常见的钩子方法包括:process_spider_input(self,response,spider):在response传递给爬虫之前调用,可以用来过滤或修改响应。process_spider_output(self,response,result,spider):在response被爬虫解析之后,生成的result(通常是Request或Item)传递给引擎之前调用,可以修改或过滤这些结果。Process_spider_exception(self,response,exception,spider):在爬虫解析response过程中抛出异常时调用,可以用来处理异常。Process_start_Requests(self,start_Requests,spider):处理爬虫的初始请求,通常用于修改或扩展初始请求。1、创建项目2、编写爬虫3、运行爬虫4、提取数据下载器中间件示例:classCustomUserAgentMiddleware:defprocess_request(self,request,spide

温馨提示

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

评论

0/150

提交评论