【《基于Python的分布式爬虫探究7800字(论文)》】_第1页
【《基于Python的分布式爬虫探究7800字(论文)》】_第2页
【《基于Python的分布式爬虫探究7800字(论文)》】_第3页
【《基于Python的分布式爬虫探究7800字(论文)》】_第4页
【《基于Python的分布式爬虫探究7800字(论文)》】_第5页
已阅读5页,还剩39页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

摘要在这个互联网飞速发展的时代下,随着互联网服务规模的不断增长以及当代爆发式的信息规模,与之相关的数据服务也随其增长,只靠单机的集中式处理的能力是很难满足当代庞大的数据源采集需求。国内外互联网的使用人数在当代的互联网发展下只多不少,互联网的数据也是随其在不断扩大,单纯靠以前的收集方式很难去高效的完成数据采集,那么数据的采集技术必然要随其发展,所以在这样的需求下便产生了分布式的网络数据采集技术,基于分布式的网络爬虫是由多个可以并行爬取所需内容的爬虫组成,这样的系统兼备了良好的可扩展性,这些爬虫在数据检索上的优秀表现也受到了人们的喜爱。在这样的这样的互联网发展环境下,文章将根据需求,设计并实现一个具有针对性的简便高效的分布式网络基于上述研究,本文设计并且实现了一个分布式结构的爬虫。对现在流行的分布式爬虫的相关技术基础上,对需求进行设计和分析,结合具体的代码展示了分布式爬虫的设计细节,通过实验表明了分布式网络爬虫在爬取庞大数据时的优点,并且最后进行技术总结和展望。本文中设计并且实现的分布式爬虫系统,充分的利用了网络宽带和计算机硬件系统,这样不但大大的提高了数据采集的速度,还降低了此系统的损耗。此外,它增强了系统的可扩展性,可以适应更多类型的数据。关键词:分布式爬虫,Python,Scrapy,Redis,Mo 1 1 1 1 2 2 2 3 32.4Redis数据库 42.5MongoDB数据库 4第3章系统需求分析 53.1功能需求 53.2用例图 53.3架构示意图 63.4功能架构划分 73.5程序流程图 8第4章数据库设计 94.1数据库E-R图 94.2数据库表及其结构 第5章系统详细设计与实现 5.1爬虫的设计与实现 5.1.2爬虫的具体实现 5.2爬虫防屏蔽的实现 5.2.1伪装浏览器的实现 5.2.2代理IP爬取的实现 5.3.1对象定义程序 5.3.2数据处理程序 5.3.4数据可视化程序 第6章系统运行 第7章系统测试 7.1测试简介 207.2测试结果 1第1章绪论1.1系统研究背景及意义1.1.1系统研究背景这几年,中国互联网的发展状态已经到了稳中求快阶段,互联网已经全面参与了我们生活的方方面面,在很多地方互联网已经给我们生活与工作带来了很多便利与高效。现在的互联网发展给我们的社会的发展带来了极大推动力、极大的改善了人民生活的方式,爆发式增长的网民数量给大数据的发展带来了空前绝后的机遇。如果想要更好地解决这个需求矛盾,就要以解决怎样从越来越庞大的数据海洋里面极快的速度、极高的效率和安全性中找到用户所需数据成为了数据收集引擎的主要实现的目标。在不断庞大的数据源的现状下,想解决数据挖掘问题,单方面的依赖单机处理是几乎不可能去完成的,即使是把单机的硬件水平提高到一定的档次,也不可能追赶的上信息发展的速度。经过很多专家日日夜夜的苦心钻研,他们提出了一种新的数据检索技术,那就是分布式检索技术。这个新技术发布之后,许多业内人士对这个持有高度关注,现在几乎所以的搜索引擎都采用了这个技术,就比如著名的搜索引擎:“Google”和“百度”,这些搜索引擎采用的就是这种新的数据检索技术,采用分布式的爬虫的技术方式来实现增强数据检索的效率。分布式爬虫系统采用分布式数据采集技术,基于分布式网络爬虫,连接的多台机器,并行爬取所需内容,通过中心节点协调,解决庞大的数据采集、存储和处理的问题。1.1.2系统开发意义随着大数据时代的到来,如何采集庞大的数据库也是目前难题之一,这个时候网络爬虫就变成了一个必不可少的东西,其中爬虫又分为单机爬虫和分布式爬虫。分布式爬虫是在多台机器上运行爬虫程序,重点是联合采集数据。在多个服务器上能够协同采集的就是分布式的,分布式实现了多台主机使用一个共同的爬虫程序,可以在多台电脑上运行,这样的话可以提高爬虫效率。像是采集非常大量的数据,多线程爬虫是很难做到高效的,所以研究分布式爬虫是这个大数据时代所必须的。无论是单机或者是多台主机,分布式爬虫都对计算机的性能有一定的要求,首先是处理器,其次是网络,分布式爬虫的效率会受这些的影响,如果硬件设施无法达到要求甚至不如单机爬虫。分布式爬虫本质上就是将程序的运行从一台机器扩展到多台机器,21.2研究方向与内容本文结合实际的系统需求,基于Python语言和Hadoop分布式框架,设计并且(1)上网查阅学习现在较为常用的分布式爬虫系统的模型,在学习和实操(2)主要去学习与分布式爬虫相关的理论知识和模型,对秀动网的字段进行具(3)细化分布式爬虫系统设计的结构重点,通过编写代码具体实现一个分布式(4)将本文的分布式爬虫系统应用于实战环境,对其爬取的效率和稳定性进行测第2章相关工具和理论介绍Python是一种简单易学的编程语言。如果你尝试去阅读一个已经编译好的优秀的现需求解决问题而不是去把语言本身搞明白。Python对新手及其友好且易上手,因为和阅读的过程非常愉快,但Python是用c语言来编写的底层,所以现在大多数的标准库和第三方库基本上也都是通过c语言来编写的,用Python编写好的程序运行的效率3Hadoop是由ApacheFoundation开发的分布式系统框架。使用者可以在对底层的具行高效的运算和数据存储。Hadoop能够实现一个分布就是HDFS。容错性高是HDFS的一个重要特点,设计可以在比较落后的硬件上部署;Scrapy的整体架构大致如下(图片来源网络):图2-1Scrapy整体架构图4ScrapyEngine(引擎):是整个框架非常重要的核心,处理系统的数据流,完成各个部分的通信。Scheduler(调度器):作为调度器,它主要功能是接受引擎发送过的请求,把这些请求进行一定的排列和整理,按照顺序对请求进行调度。Downloader(下载器):下载器是接收引擎发送过来的下载请求,然后去网页上面把需求的数据下载下来,之后返回到引擎当中。Spider(爬虫):爬虫把爬取的链接发送给引擎,引擎通过其他模块返回的数据交给爬虫,然后解析这些返回的数据。ItemPipeline(管道):管道就是能够把爬虫发送的数据进行保存DownloaderMiddlewares(下载中间件):这个主要就是一个扩展的中间件,主要影响的是下载器和引擎之间的通信功能。SpiderMiddlewares(Spider中间件):与下载中间件类似,也是扩展爬虫和引擎两者通信的中间件。Redis是一个完全开源的数据库,性能极高的key-value数据库,Redis数据库支持数据的长久保存,它能够把保存在内存里面的数据转存在硬盘当中,哪怕电脑重启之后也可以访问,而且Redis数据库还支持多种类型的数据,可以以不同的数据结构进行存储。它还能够将数据进行备份保存。Redis的优点包括它具有极高的读写速度,具备非常丰富的数据类型操作,Redis还具备原子性,什么是原子性呢,简单来说就是执行成功或者失败完全不执行。MongoDB是一个基于分布式的数据库系统。底层是由C++编写。它主要是为WEB应用程序提供可伸缩的高性能数据存储解决方案。MongoDB数据库是主要面向文档类型的存储,操作简便易行,可以设置任何属性的索引来做到很快的进行排序,还可以利用创建镜像来增强其拓展性,如果在高负载的情况下,它可以做到利用分布式来处理数据,通过不同的节点。其可利用JSON标记的形式的查询指令轻松查询对象和数组。MongoDB还支持很多编程语言,比如Python,Java,C++等各种类型的语言。其中它的Map函数是通过调用二叉树来遍历集合中的数5第3章系统需求分析3.1功能需求需要去解决的问题,基于这个需求我设计了该项目3.2用例图O退出系统图3-2爬虫用例图中间代理层中间代理层因特网pongoDBpongoDB图3-3架构示意图67爬虫功能的功能需求主要在对于字段的爬取,对网站反爬的处理,内容的保存和处理。这就要求爬虫能够满足对于网站各种信息的晒别,提取,能够应对网站的反爬,以及对爬取出来的内容进行收集和处理。系统功能架构如下图所示:爬虫下载异常处理爬取策略设计爬取内容存储爬取字段设计反反爬处理增量与去重字段提取从初始页面开是否匹配爬取内容是否有下一页链接是否匹配爬取内容队列起取列表是否为空89第4章数据库设计4.1数据库E-R图系统采用的是MonggoDB数据库,从需求的分析上找出实体,实体和属性联系通过E-RE-R图表展示,通过优化后得到具体模型,系统的E-R图如下图所示:图4-1数据库E-R图4.2数据库表及其结构该表主要是以主要爬取字段为目标,由Slave服务器端解析爬取字段数据,所以数据库表的内容必须符合抓取内容。以秀动网演唱会数据为主,通过分析内部结构,内容字段如下表所示:1平台23表演时间4明星名字567页面地址第5章系统详细设计与实现该系统主要以爬取秀动演唱会网页内容为主来设计爬虫,重点考虑爬取策略的设计,数据的抓取、去重和增量功能的实现、爬虫防屏在Scrapy的结构里面,爬虫是从我们设置的初始的URL来开始数据爬取,爬虫从需要爬取的URL,并把这些地址存入接下来需要爬取的队列中。在对爬取的内容进行去重并且进行排序之后,等待调度器对其进行调度。在这个爬虫系统中,爬取下来的URL可以分为两种,一种是下标页码的链接,也就是我们在网站里面看到的下一页的allowed_domains=['showsredis_key='xiudong:start_ur#foriinrange(1,90):#start_urls.append('/event/list?cityId=0No=%s'%(i)#初始URLbase_url='/event/list?cityId=0&siteld=defparse(self,response):urls=response.xpath('//ul[@class="g-list-wrapjustifyMT30"]/li/a/@href).extract()names=response.xpath(//ul[@class="g-list-wrapjustifyyieldscrapy.Request(url=j,callback=self.handle)ifself.index<100:yieldscrapy.Request(self.base_url.format(self.index),callback=self.parse)self.index=self.index这个部分就是对于我们初始链接开始爬取的相关策略,采用的模式是分布式的主从模式,就是把Master端爬取下来的相关详情页面的URL,存储在Redis当中,并且把这些需要爬取的地址发送给Slave端的爬虫进行爬取。5.1.2爬虫的具体实现关于爬虫系统相关的功能的具体实现,包括了四个基本功能的实现,分别是数据抓取,数据存储,相关对象的定义以及内容下载。先从数据抓取来说,数据抓取我分为两个部分,其中先是Master端的抓取程序,Master端主要是爬取所需的相关页面的URL,并且把这些地址存入Redis中,Slave端从Redis中获取地址并且按顺序对这些网页进行抓取,抓取的字段的规则和Xpath提取字段的方法等都在程序中做了定义,所以爬虫能够将详细页面中需求的数据爬取下来,在Xpath中包括了多种类型,分别是元素、文本、属性、命名空间、处理指令和文档节点,其中把网页文档当作节点树,通过Xpath当中的正则表达式来对目标节点进行定位就可以抽取页面的具体字段。独家【秀动呈献】天声乐队[感官五部曲]-1rcdivclass="auto-widthclea▶ahref="httos://52.sh「盲」巡演杭州站55992.0xe.ieg"class="posters-fancybox11场地:杭州杭州MAOLivehouse地址:浙江省杭州市上城区中山南路77号尚MAOLiveHouse杭州查看地图<spanclass="sole"><divclass="goods-type">_</divXpath抽取方法详细代码如下:title=response.xpathC/h1[@class="goods-name"]/text(').extract)[-1].replace('\t',"info=response.xpath('//ul[@class="items-list"]/li/texShowTime=info[0].replace('\t',").repactors=response.xpath(//ul[@class="items-list"]/li[2]/a/text(')response.xpath(//ul[@class="items-list"]/li[4]/text()').extract([0].replace(\t',").repprice=response.xpath('//span[@class="price"]/text()').extract()[0]5.1.3去重与增量爬取(1)获取Redis里面的等待爬取的队列中的URL(2)判断请求的URL是否已经在已爬取的队列当中,如果不在则进行爬取,如果NEWSPIDER_MODULE='CatEye.spider#Crawlresponsiblybyidentifyingyourself(andyourwebsite)ontheuser-agentUSER_AGENT='Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/88.0.4324.190REDIS_HOST=''#根据自己的ip进行更改DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPSCHEDULER="scrapy_redis'scrapy_redis.pipelines.Redis5.2爬虫防屏蔽的实现我们正常访问一个网页的时候,不会对网页产生什么影响,因为我们访问的速度和次数不是很多,处于一个服务器正常的接受范围内。但是,我们如果使用爬虫去访问网站可能会因为速度过快和访问次数过多导致网站的服务器负载过大,从另一方面来说,网站的管理员有时候并不想因为爬虫增加服务器的负载,也不想让自己网站的数据被大规模的爬取,所以为了保障服务器状态正常能够让普通的用户访问且不会导致自己网站的数据被大规模爬取,许多网站为了应对爬虫写了相关的反爬策略。如果你使用爬虫爬取对方网站的内容的时候触发了这个网站的反爬程序,普通情况下可能会激活一些机器人检测程序由此过滤掉你的那些爬虫,让你的爬虫无法工作,更严重的会直接封锁你的IP地址让你永远无法使用这个IP访问这个网站,所以我们的爬虫就要模仿普通用户来访问这个网站,以此来绕过这个网站的检测程序,所以如果不加思索的暴力爬取网页可能会让你的数据挖掘过程举步维艰,所以我们就要对自己的爬虫进行伪装,绕开屏蔽程本文的爬虫系统使用的是以下反反爬策略:1.通过模拟伪装成不同的浏览器模式来访问网站2.设置IP池,并以IP池里面的IP更换爬虫访问时的IP3.通过调节爬虫爬取的速率来降低反爬程序检测到的可能性。5.2.1伪装浏览器的实现利用Scrapy框架中下载中间件的模块可以自定义的特点,对我们请求的属性进行修改来实现伪装首先就要在setting.py中添加中间件模块,之后就是对中间件进行拓展的,通过制作一个useragent列表,将我们需要修改的浏览器请求写入列表并进行保存#Crawlresponsiblybyidentifyingyourself(andyourwebsite)ontheusUSER_AGENT='Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/88.0.4324.190Safari/537.36'请求列表中任意的一个agent值,之后便使用这个值来下载内容。每次爬取内容时都会模拟不同的浏览器模式来进行访问。settings.py里面对中间件进行设置,之后扩展组件设置对请求的头文件从IP池中随机选取一个IP作为访问的代理IP,之后下载器便使用这个来进行下载。爬虫的异常处理是爬虫系统正常运行的保障,在没有被网站爬虫系统拥有健壮性的关键。在settings.py中我们所拓展的中间件捕捉到了爬虫运行的异常状态之后,将请求Request重新加入到待下载队列当中流程如下:图5-2异常处理流程图数据存储模块的实现主要是通过Slave端将爬虫爬取出来的数据进行存储,其中所使用到的数据库是MongoDB。Scrapy拥有很多种数据存储的格式,比如json,csv和xml等文本格式,使用者需要对爬虫进行设置。需要在Scrapy工程文件中的ItemPipline.py中对文本格式进行设置,同时,Scrapy也支持数据库存储,如MonogDB和Redis等,当爬取非常庞大的数据的时候,也可以通过数据库的集群来解决问题。本文系统的数据存储流程如下图:爬虫下载提取数据5.3.1对象定义程序数据存储需要一个定义采集数据的容器,本系统使用的是Item。系统声明对象是通定义与之相关的对象,来控制从网页中获得的数据。本文中的系统分别定义了九个抓取对象,分别是:标题,表演时间,演员名字,地址,价格,url。关键代码如下:actors=scrapy.5.3.2数据处理程序爬取下来的数据需要使用Pipeline这个类来实现,这个类定义了爬取数据输出和保存的方法,用爬虫的Parse的方法把数据返回到Item,把与列表对应的Pipeline类进行处理之后输出,关键代码如下:defopen_spider(self,spider):connect(host='localhost',port=3306,user='root',password='root',db='yanchu'defprocess_item(self,item,spider):]sql='insertintot_showstart数据存储模块主要负责将slave端爬取解析的页面进行存储。使用Mongodb对数据defopen_spider(self,spider):defprocess_item(self,item,spider):self.client.yanchanghui.xiudefclose_spider(self,spider):数据库实现界面:DocumentsAaaregationsSchemaExplainPlan数据可视化是一种利于人们阅读的一种数据转换模式,本文的系统通过使用MongoDB数据库来保存数据。然后利用Matplotlib把数据进行可视化的处理,Matplotlib其实是一个通过Python来开发的二维数据绘图库。效果如下图所示:图5-5可视化实现图nevent04月17日event04月22日event04月16日喜客账国hips初相遇西安市码林区王府井百货南门店04月17日情定event04月24日event04月18日图5-6可视化实现图第6章系统运行Slave1端运行截图:(referer:/event/list?cityId-06siteId-06isL22:00°,actors':'THEONE玩儿乐队,address':‘地址:包河区宁国南路与水阳江路交口垂街二期15号楼安微原创音乐基地3楼场地联系电话:153-0560-8564,'price':'80','url:'https://Mwactors':‘新生乐团(NCO),'address':‘地址:天河区天河路228号正佳广场七楼正佳演艺剧院正佳演艺剧院','price':'520','url':'/event2021-04-2400:13:01[scrapy.core.engine]DEBUG:Crawled(200)<GET/event/137284>(referer:/event/list?cityId=0SsiteId=06isLis2021-04-2400:13:09[scrapy.core.engine]DEBUG:Crawled(200)<GEThttps:/(referer:/event/list?cityId=0SsiteId-0sis2021-04-2400:13:05[scrapy.core.scraper]DEBUG:Scrapedfrom<200https:/M/e日19:30-20:30°,'actors':‘待定,address':‘地址:北京市朝阳区安立路28号院3号楼华创生活广场一层元影城(安2021-04-2400:12:57[scrapy.core.engine]DEBUG:Crawled(200)<GEThttps://M/e(referer:/event/list?cityId=0SsiteId=05is(referer:/event/list?cityId=05siteId=05isDuruIns,vaueETrOT:unsupp

温馨提示

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

评论

0/150

提交评论