




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
广州市二手房价数据分析DataAnalysisofSecond-handHousingPricesinGuangzhou
广州市二手房价数据分析内容摘要随着随着新中国的繁荣昌盛,国民的生活水平大大提高,人民购房的需求愈来愈多,出现了很多带有房价数据的网站,这些数据可以为各个领域的发展提供良好的帮助。这种情况下,为了能让客户更好地选择适合他们心仪的房子,就要更好的对这些数据进行获取。因此,加强对房价网使用爬虫技术获取数据的研究具有重要意义,促进我国房价市场更好的发展。本选题的意义是设计并实现对广州市二手房价的数据分析,利用大数据爬虫房价网去分析每个地域的房价,为用户提供一个可以最直观了解到广州市房价的具体信息。采用python的scrapy爬虫框架对链家网数据进行爬取,并将爬取到的数据输出为csv格式文件,再使用tableau对数据进行分析与可视化。关键词scrapy框架房价数据可视化AbstractWiththeprosperityofNewChina,thestandardoflivingofthepeoplehasbeengreatlyimproved,thedemandforhousingisincreasing,andthedatainvariousfieldsareincreasing,sothatthecurrentsocietycanentertheeraofbigdata,whichcanprovidegoodhelpforthedevelopmentofvariousfields.Inthiscase,inorderforpeopletobetterchoosetherighthouseforthem,itisnecessarytobetteraccessthesedata.Therefore,itisofgreatsignificancetostrengthentheresearchonhousepricenetusingcrawlertechnologytoobtaindata,andtopromotethebetterdevelopmentofhousepricemarketinChina.Thesignificanceofthistopicistodesignandrealizethedataanalysisofsecond-handhousepricesinGuangzhouUsingthebigdatacrawlerhousepricenettoanalyzethehousingpricetrendofeachregion,toprovideuserswithamostintuitiveunderstandingofthehousingpricesinGuangzhouspecificinformation.ThepythonscrapycrawlerframeisusedtocrawlthedataofLianjianet,andthecrawlingdataisoutputintocsvformatfile,andthenthedataisanalyzedandvisualizedbytableau.Keywords:scrapyHousingDataVisualization目录TOC\o"1-2"\h\z\u22886第一章绪论 绪论选题背景及意义随着信息技术的迅速发展,现在的网络行业信息已经出现出了爆炸式的快速增长,互联网上的用户通过使用搜索引擎后就可以轻易地在国际互联网上进行搜索并得到大量的行业数据与技术信息。所以,如何建立连接和获取信息已经不再是困扰用户的难题了。众多互联网用户在网上找房子,房价越来越透明,由此产生了大量的数据与信息,本文将以链家网为爬取对象,使用scrapy爬虫框架爬取互联网房价情况,由此对现今房价情况进行分析。Python语言具有丰富的库,曾被誉为胶水语言,其可以连接多种语言,例如Java,c等语言。其中scrapy库被使用的最多。Scrapy是Python语言进行开发的,他是为了爬取网站数据而生,而且其是开源的,可以频繁的用来进行数据爬取信息处理。使用Scrapy,可以以最快的速度,根据自己的需求,爬取所需要的数据,然后保存网页数据为任意数据格式。1.2国内外研究情况国内外许多技术专业人员和研究机构对该技术进行了长期深入的研究。自上世纪90年代以来,许多计算机工作者一直在研究这项技术。目前,履带技术已经日趋成熟。许多世界著名的商业搜索引擎,如谷歌,Yahoo,其核心模块是网络爬虫,采集范围广,速度快,爬虫技术是1990年由蒙特利尔大学的学生艾伦·埃塔奇(AlanEmtage)发明的。尽管当时还没有现在意义上的万维网(WorldWideWeb),但是已经有百万,千万的网络文件分散存在,它通过脚本代码,自动化从网络上搜寻文件,索引其相关的信息,对于使用者来说,他们可以通过既定的表达式来查询文件。受此启发,在1993年左右,美国的研究机构开发了一款类似该功能的搜索工具,此时的搜索工具除了索引文件之外,还能够检索网络页面。另外,国内也有很多研究网络爬虫系统的机构和学者。以“天网”搜索引擎为例。它是由北京大学开发的主从式网络爬虫。主节点根据爬虫程序的性能适当地分配任务。它专门负责对特定的网站进行抓取,采用广度优先的遍历算法策略进行抓取。对于天网系统,不仅可以用来搜索普通网站,还可以搜索FTP站点的信息数据并且方便了用户查找,查询文件。国内还有许多非常优秀的相关学者和研究人员也做了大量的工作。2015年,马连帅等人设计了基于分布式网络新闻采集系统Scrapy的数据采集框架。在分析新闻网站的结构特征的基础上,根据其结构特性,设计了关键词字段抓取和爬虫抓取策略。涉及到动态呈现的网页时,像Selenium这样的自动化测试框架可以用来模拟特定的浏览器操作来呈现结果页面进而解决无法访问的问题。利用Redis缓存数据库管理抓取队列,通过Scrapy中间件设置请求延迟和访问网站阻塞IP地址的问题。在研究爬虫策略和爬虫框架的细节中,我们可以发现制定合适的爬虫策略和爬虫系统架构是非常重要且非常有必要的。在这整个系统化的工程中,可以说每一个环节都是紧密相连的。考虑到了Scrapy已经有比较成熟的文档和扩展,开发起来相对会轻松一点,可以达到预期的结果。1.3本文组织架构本文根据scrapy框架使用pycharm编写python程序,从链家网爬取到数据以后输出csv文件,再用tableau根据不同地区、坏境,地铁等条件对房价进行分析,并将分析的数据可视化展现出来。第一章是引言部分。在本章主要阐述了整个项目的以及项目的背景介绍。分析了爬虫从开始到选择的历史,目的是为了说明该项目的重要性,最后基本简单介绍了论文大概结构和框架。第二章对相关的技术进行了概述。在本章里主要介绍该系统开发中可能会涉及到的主要技术,大致上包括scrapy,Robot协议,Tableau,xpath,cookie,selenium,webdriver以及proxy代理等。第三章是对爬虫每个模块架构的描述。主要是对系统进行了可行性和功能性这俩部分的模块架构描述。第四章则是各个模块代码实现。主要是从爬取对象,反爬机制,总体系统的架构设计来介绍。第五章是对爬虫爬取的数据的分析与可视化,用了多个例图来作详细介绍,还包括详细的运行过程和代码。第六章是对爬取到的房价数据进行分析,具体包括对房价以及人数分布,受欢迎程度,房价特征进行详细分析。最后是对此爬取房价数据进行了总结。
相关技术概述2.1爬虫技术网络爬虫可以根据代码规则来自动爬取网站上的一些相关信息,并可以存入数据库。目前有很多家国际互联网公司或者个人使用爬虫,其中包括百度,谷歌等网站,爬虫可以把一个网页上的内容都存储下来,然后对网站上的一些内容进行获取和更新,爬虫的架构主要分为三个模块,分别为数据的采集,数据处理和数据的存储。但是在爬取数据的过程中,爬虫会发出大量的请求,并且网站的开发人员可以检测到都是一个Ip地址请求的,于是网站维护人员就会把该Ip地址拉入黑名单,从而导致爬虫程序发生异常,这种方法有一定的误伤率,容易导致正常的用户也无法访问。也有一些网站是通过cookies这个文件来判断这个请求是否是机器还是人,或者判断该访问请求的权限,正常用户在登录网站的时候,就会留下自己Cookies信息,爬虫可以通过分析网页的代码来进行模拟人为请求,从而拿到正常的cookies信息,因此有些网站又新增了验证码这个方式,增加了爬虫正确爬取的难度,有些技术比较强的网站,甚至还会设置Session,当爬虫能拿到服务器对用户的标识Id时候,才能够拿得到Cookies信息。2.2scrapy框架介绍2.2.1scrapy简介scrapy是一个网站程序抓取框架,用于抓取一个网站内的数据和用于提取网站结构化的数据或非结构化的数据。它目前可以广泛用于企业数据挖掘、数据处理和历史数据分析存储等一系列应用中。它最初是为进行页面上的抓取(确切地点来说,是专为网页数据抓取)而进行设计的,可以广泛应用于网页服务接口(就比如说amazonassociatesweb抓取服务)或获取爬虫引擎返回的网页数据。python是一种高度相互集成的计算机软件编程语言,具有丰富的源和开源库。scrapy框架促进爬虫的设计和工作更加快速、简单,具有很高的程序健壮性和可扩展性。scrapy在爬虫设计中得到了非常广泛的应用,符合本文所设计爬虫的特征。因此,用scrapy来完成这项研究。2.2.2scrapy框架组件图2-1scrapy框架组件如所示图2-1是基于scrapy组件框架的结构图,包括各种组件和系统中发生的各种数据流的概述。图中涉及的组件主要包括:程序执行器和引擎(scrapbyengine)、spider、item、pipeline、调度器、下载器和下载前中间件middleware。下面是对每个应用程序组件的简要介绍。1.引擎(ScrapyEngine)scarpy的数据流程都由scarpy引擎控制。控制整个系统数据在组件中的走向以及有着相应的触发操作。2.调度器(Scheduler)爬网和执行任务的优先级序列通常都是由任务调度器作于维护。调度器自动从引擎接收请求对象,并将这些请求对象直接插入到引擎队列中,以便在以后使用scarpy引擎从引擎发送请求时直接向引擎提供请求对象。每个动态爬虫可以维护自己的动态内存中心队列,一个内存中的队列不能在多个爬虫之间直接共享内存中的队列。由于requset对象的主体结构是result组成,所以在调度模块中的请求对象会比较紧凑。3.下载器(Downloader)下载器主要负责实时获取每个页面、每个模块的数据,将这些获得的网页数据实时提供给搜索引擎。下载器导出和下载页面后,将自动生成下载页面的文件,并通过下载器的中间件将响应发送到scrapy引擎。之后,由响应引擎处理。4.爬虫(Spider)爬网程序是一个由用户编写的组件,用于从响应中提取要爬网的项和请求对象。一个网站项目通常可以对应于多个爬虫程序,每个爬虫程序通常负责自动处理一个或多个新网页。scrapy用item来保存从非静态结构化对象数据中,通过爬虫获取得到的所有结构型对象的数据。5.数据管道(ItemPipeline)数据抓取管道是一个负责数据处理的item。数据对应的每个函数request都可能会自动产生多个新的item处理对象,数据处理管道对每个新的item处理对象可以进行三种处理,比较典型的三种处理方式有爬虫数据管道清理、权限等级验证及数据管理持久化。6.下载器中间件(Downloadermiddlewares)下载器的中间件通常是位于加扰器引擎和下载器之间的一个特定挂钩,称为下载器中间件,是直接处理下载器并传输链接到搜索引擎的文件响应。下载器上的中间件还提供了一个便捷的下载机制,通过插入自定义代码的操作来扩展Scrapy功能。7.Spider中间件(Spidermiddlewares)spider上的中间件是位于scrapyengine及爬虫(spider)之间的特定俩个钩子(specifichook),分别用来处理爬虫的responser和一堆item对象中的requestsm的输出。spider对于中间件有一种十分方便快捷的扩展机制,同时用户可以很方便地自定义代码来扩展scrapy的功能。2.2.3scrapy工作原理scrapy的框架是由执行它的引擎驱动的控制程序操作的数据流。第一步,当引擎打开一个网站时,它可以找到一个正在处理该网站的爬虫程序,并自动从该网站爬虫程序请求不需要爬虫的网站请求。在第二步中,引擎自动从爬虫程序获取不需要爬网的第一个网站任务的数据,并在数据调度器中以爬网任务文件的形式调度数据。然后向调度程序发送不需要爬网的下一个文件任务的请求。再次,该schedul将不需要爬网的下一个文件任务的请求返回给爬网引擎,该引擎通过该爬网引擎的中间件将爬网任务内容转发给下载引擎;步骤四,下载程序自动执行下载处理任务。一旦下载程序下载了页面上的内容,下载程序会自动生成一个已经属于下载页面的响应,并通过下载程序上的中间件向爬虫引擎发送一个响应任务;第五步,引擎从旧的下载程序中间件接收并获得一个响应,并将其发送给新的爬虫引擎,通过新的爬虫引擎的中间件进行下载处理。在spider处理响应之后,引擎然后返回通过爬网到引擎获得的项新数据任务。步骤六,引擎将任务转发到数据处理管道,对从爬网程序库获得的项进行爬网,并将从生成的任务转发给调度程序;第七步,重复第二步,直到这个调度器中没收了有待引擎处理的一个任务,引擎才会关闭该任务网站。在scrapy框架中实现的url子类的重复数据消除方法是通过类的RFPDupeFilter来实现的,具体来说,调用子类中的request_fingerprint类型的重复数据消除方法,直接达到重复数据消除的目的。程序代码的基本结构格式如下。可以看出,在上述两段代码中,被删除和重用的指纹信息块和指纹函数分别使用了4个组件,通过sha1算法组合得到了一个sha1(method+URL+body+head)。scrapy框架本身提供的动态重复数据删除方法非常好。这种重复数据删除方法唯一能做的就是确定一个地址请求需要指向的动态资源。在某些情况下,例如,需要请求一些新的动态资源web页面。url资源地址的后半部分通常分别有多个参数。如果参数中这些值的顺序稍微颠倒一下,就可能变成不同的资源web地址。但是scrapy框架自己的重复数据消除方法有很多缺点,它使用sha1算法来消除160位信息的重复,例如指纹,或者20字节的信息。如果一个模块包含100万个页面,爬在一个单一页面的网站上,只需直接爬行来衡量这个模块就不需要占用20米的内存,如果还需要爬300个这样的单一页面的网站,直接爬模块就会占用6G的内存,这样的话,用一个垃圾网站自己的网址到这个模块,将会耗费大量的内存。2.2.4scrapy的安装与使用在windows系统里使用的是Anaconda,它基于科学计算包开发库的集合。包括许多使用python的开发库以及scrapy所依赖的许多开发库。在使用anaconda的命令行窗口中,数据库使用命令condainstallscrapy,接着安装scrapy框架。在开始爬网之前,我们需要做的第一件事是创建一个名为scrapy的项目,并将该项目传输到需要存储代码的文件目录。正在运行的命令是scrapystartproject。执行项目命令后,将自动创建项目的文件夹。图2-2scrapy安装在开始进行字典数据抓取的工作前,我们通常需要先编写好item.py这个文件,因为这里的item.py就是我们用来保存通过爬取得到的文件和数据的一个容器,其和我们在python这个框架中的对字典拼写使用的方法非常类似,并且为了有效避免由于字典拼写错误导致的未正确定义字段的错误,还提供了额外的字典错误保护机制。如果我们已经学习过了django这个框架的话,会对于item.py感觉到很熟悉,因为我们觉得item有点像是类似django这个框架里的两个对象之间关系映射(orm)。定义一个好容器(item)后,就表示我们可以开始创建需要抓取spider的文件了,spider文件夹中需要分别定义三个文件属性,name这个属性的文件夹是可以用来说明如何区别抓取spider的。因为同一个文件夹下可以存在那么多个需要抓取spider的文件。start_urls包含了需要抓取spider的列表和在重新启动的网页时候需要进行网页数据爬取的初始url列表。因此,第一个被完成获取下载到的页面被认为是其中之一。后续的url是在获取初始url之后,再从下载的网页数据中提取的。Parse()是spider中其中一种数据提取方法。当一个函数调用该方法时,在初始url对象获得下载后重新生成的每一个spider的响应对象都会将该函数作为唯一的参数在下载后传递给该对象的函数。接着我们需要从初始spider需要抓取的网页中提取下载所需的网页数据。从初始网页中提取所需数据有很多不同的实现步骤和方法。Scrapy是一个设计好的框架,部分原因是它要求用户使用xpath实现和基于css的自动web样式选择器(selector,selector)。例如,我们现在可能需要手动重新选择电子web页面的名称标题,这就是简单的/HTML/title/text()提取方法。我们可以选择lt;Headgt;保存在标签中的文档。Titlegt;元素。我们所能做的就是从存储在web页面上的文档中提取文档和数据,例如beautifulsoup。Scrapy的提取方法选择器有四个基本的提取方法:xpath()传入一个xpath的正则表达式,这个表达式是正则表达式的节点返回一个字符串的列表。整个系统的流程中传递的是一个CSs的正则表达式,它返回正则表达式对应所有节点的selectorlist列表。Extract():将表达式中的节点序列化为unicode字符串并返回它。Re()是根据表达式提取其中的数据节点并返回一个unicode字符串列表。2.3常见抓取策略2.3.1广度优先搜索算法BFS分析算法也许是所有图搜索算法中最重要、最基本的分析算法之一,它是许多国际经典的图搜索算法策略分析算法的原始实验例子。例如,数据库生成领域著名的通用单源最短路径生成算法和常用的最小路径生成器的树路径算法都用的是基于BFS的算法。如前文所述,BFS的实现相对简单。其操作目的也就是从初始化的节点开始,尽可能地不断搜索其他几个节点是否作为初始化的节点,然后不断探索其他节点的是否存在,同时不能忽略其他节点的具体操作细节,这样就是一种盲目性的搜索。BFS现在被广泛应用于一般的网页搜索引擎中,旨在为尽可能多的搜索内容编制一个索引。当然,也有人开始尝试在一些焦点搜索爬虫中尝试使用类似的比如BFS等算法。BFS的搜索爬虫策略的主要出发点是,相对接近初始URL的搜索链接的搜索网页往往具有较高的搜索主题和相关性,因此它们通常能够优先接受爬虫。虽然这种安全策略被广泛使用,但有时可能会出现一些不可避免的安全问题。随着各种索引页面的逐渐增多,许多无关的索引页面往往被大量下载,这往往需要一些后续的应用程序或脚本进行搜索和过滤,严重降低了工作效率。2.3.2深度优先搜索算法深度节点优先搜索的策略同时也被我们称为一个DFS节点优先搜索,与被统称为广度优先搜索的策略刚好完全相反,在一个DFS中,对于一个未发现节点存在新的搜索节点,如果有一个子节点未被检测到,它将继续沿着该子节点进行探索,直到没有更深的子节点。2.4Robot协议robots访问协议规范又称互联网爬虫访问规则,适用于互联网行业爬虫的新的规范,该协议的主要目的是保证用户的个人隐私以及网站的隐私内容,以及收录的数据等,该规则规定了能否允许爬虫爬取的内容以及页面,同时也包括搜索引擎可以爬取的范围,根据这些协议的内容和规定,我们所编辑的爬虫程序就可以根据该规则去进行爬取。 robot的协议通常是有网站的开发者或者维护人员所自定义的一个文本。robot这个协议的位置是存储于站点的服务器的根目录下,其格式是txt,名为robots.txt。在爬虫爬取一个网站的时候,他会首先检查这个文件的存在,并且读取该文件的相关规则,以及里面的配置相关信息,和确认该程序在该站点的访问权限,如果没有该文件,则进行全网爬取。本协议不是一个强制和严格的国际网络安全法律关系协议。如果一个网页搜索结果引擎或者一个爬虫引擎应用程序不完全同意遵循此管理协议,则其自己自行设计的源源代码可以完全自由地对这个站点内容进行管理中的资源进行爬网。同时,网站管理员还可以使用其他方式限制网站中的网络爬虫的操作。因此,爬虫和网站之间的关系是非常复杂的。在设计过程中,为了提高爬虫的可行性,必须考虑到这些局限性。2.5Tableau简介tabeau是目前市面上一款基于大数据可视化的一个数据管理工具,目的是用于帮助人们快速查yue并理解自己的数据。与大部分传统的BI数据管理软件不同,tableau是一种不同的bi数据管理工具。它使用户可以轻松地使用tableau的拖放操作界面。它用来管理以及可视化任何不同类型的数据,探索不同的视图和数据库,它可以轻松地集合多个不同类型的数据库。它没必要使用任何复杂的数据库和脚本。新的分析工具以tableau为代表:实现简单,注重用户体验;创造实时价值,低成本,高生产率,界面美观。使用tableau,我们可以在很快的时间内对数据进行一个分析以及可视化,其拥有很智能的操作性,用户只需要简单的拖动,就可以生成一幅幅高品质的分析图,在现今社会中有很多企业与个人使用它。图2-3tableau工作界面2.7xpathxpath是一种基于一个xml的软件路径知识标记编程语言,用于用来确定一个路径中的标识标记节点在一个xml(一种通用标准软件文档和一种通用软件路径知识标记编程语言的一个分布式子集)标准文档中的数据系统中的特定标识节点中的位置。xpath数据结构程序是一种基于xml的自动分布式树数据结构。由于爬虫程序通常都是对所有的html页面的数据进行爬网的,html和xml也都是一个树状的结构,因此xpath也支持了html。数据采集和匹配是爬虫的主要目的。一般来说,所需的采集数据并不是所有的同一个页面。爬虫程序需要使用数据采集和匹配方法来才能获取一个指定的表达式数据。python中也包含了所有正则表达式类库,但是这些正则采集和匹配表达式方法不能很好地保证与一个指定数据节点的表达式匹配,而且表达式的编写也很复杂。xpath语言大大简化了对匹配表达式的分析和编写,具有较高的数据匹配可靠性和成功率。python对于xpath语言有很好的数据匹配支持。scrapy和xpath的相互结合使得爬虫程序变得高效而且可靠。2.8Cookiecookie的信息非常小,他与用户请求和登录页面是在一起的,他伴随着网络信息,在浏览器和服务器之间进行传输。当用户单击网页链接(URL))时,web服务器可以接收到来自用户的网页登录请求,用户可以通过读取浏览器存储在此页上的cooike网页记录服务器中的一小段文本信息进行记录。http协议这是一种无连接的internet协议。在请求页面之前,服务器很难知道是否收到用户的请求和行为,这种在一定的程度上阻碍了传统交互式web的工作效率,不过它简单易实现。自动登录任意一个网站通常是我们使用cookie网络应用程序的典型场景。许多网站可能要求我们输入用户名和密码,通常服务器会为我们的下一个自动登录应用程序设置一个简单的选择框。如果这次检查我们的登录,服务器可能会将用户名和密码的加密密文发送到本页上的浏览器cookie,并将其数据保存到本地硬盘上。在后续的登录中,在进入登录界面时,浏览器将服务器cookie从本地硬盘调用到web页面记录服务器进行用户身份验证,实现自动登录。因此,站点的输入用户名和加密密码通常保存在这个页面的cookie中。当然,cookie也有缺陷。首先,每个http请求必须包含当前页面的cookie,从而增加了整个网络数据传输的安全性和流量。其次,cookie在任何关于http请求中都不受明文保护,它以明文方式传输,所以它很容易被拦截和恶意篡改。在https中,它通常是完全加密的,并且具有一定的数据安全性。Https协议对网络中cookie的数据文本大小有严格的数据结构限制,将每个cookie文本的长度限制在最少4096字节,因此很难同时承载稍微复杂的数据结构。目前很多爬虫需要使用登录名和密码登录来访问我们网站的内容。在我们使用爬虫登录之前,我们没有访问权限,自然我们无法通过登录获得网站内容。因此,我们现在可以使用urlib2库的爬虫登录工具自动保存爬虫登录cookie。爬虫程序登录并运行后,它可以自动爬行。2.9Selenium与WebDriverselenium软件是一款基于开源且完全免费自动化的框架,它主要被微软公司用来对web的应用程序和浏览器进行自动化的测试,利用它们就可以很好的用来控制和操纵浏览器以便于执行一些特定的动态渲染操作,例如点击事件、下拉事件等等,与此同时,它还可以帮助用户快速获取到当前网站在移动浏览器中已经显示的某个页面的源码,考虑到当前多数基于移动互联网的网站或多或少都已经采用了这种进行动态渲染的自动化技术。因此,使用微软的selenium软件来进行模拟此类的操作,就有点像是模拟真实网站中用户的操作,在百度爬虫中被广泛的使用。selenium在发展的整个过程中要经历三个主要版本的迭代,selenium1.0诞生于2004年左右,那时候的selenium已经具有了远程控制以及其他selenium功能的基础,此外还可以支持多种软件开发编程语言。不过由于谷歌浏览器不断推出新版本,浏览器之间的功能和特性也不尽相同,selenium也因此出现了越来越多的软件使用限制。于是到了2006年左右,第二代selenium2.0出现,来自于谷歌的浏览器开发团队的工程师为了更好的解决此前在开发中遇到的诸多问题,开始基于此项目进行新的浏览器开发,该浏览器项目被重新的称之为谷歌的webdriver,随后被重新的合并入谷歌的selenium开发项目中。Webdriver通过软件对浏览器的支持或者浏览器的扩展功能来直接让用户控制自己的浏览器,能够同时支持多款新版本的浏览器,性能基本上相比1.0版本也是有了很大的提升。在2016年左右,用来分布式浏览器测试和用于集群浏览器测试的软件seleniumgrid发布了,它使得用户可以对浏览器进行多个并行测试,运行于不同的环境上,加快了测试的速度。总的来说,作为一个强大的测试工具呢,Selenium具有如下几个特性:浏览器兼容类型较多,Selenium支持多款浏览器,包括主流的PC浏览器Chrome、Edge、FireFox,火狐以及安卓、塞班等手机浏览器。跨平台,对于诸如windows、linux、android、ios等目前市场上多款非常流行的大型跨行业平台操作系统,Selenium都能做到跨平台支持,便于程序移植。支持的语言多,Selenium支持Java,C#,Python,Ruby和PHP等多种语言,这给开发者增加了便利性。图2-5selenium2.10proxy代理代理服务器技术,全称又叫ProxyServer。如果形象地比喻的话,可以把它理解为网络信息的中转站。在正常情况下,当客户端或者浏览器发起请求到一个网站时,是直接将请求发送到Web的服务器端,随后Web服务器再将响应内容传回;浏览器端或者客户端。但是如果设置了代理服务器,它相当于在主机和服务器之间搭起了一个桥梁,在这个过程中,本地的主机并不是直接向远端的Web服务器发起请求,它首先将请求发送到代理的服务器,代理服务器进行请求报文接收的任务并将其转发到web服务器,收到请求后,服务器立即作出处理,并将相应的信息返回给代理服务器,代理服务器又将信息转回给本地的电脑,这样仍然可以正常访问页面。
系统分析在完成对相关技术概述之后,这一章系统分析主要是从经济可行性,技术可行性和功能需求三方面去分析。3.1是对经济和技术可行性进行了详细的概述,3.2是对功能上的需求进行分析。3.1可行性分析3.1.1经济可行性经济可行性的一个重要方面是研究成本,包括毕业设计所需的开发成本。综上所述,我认为我提出的项目在经济上是可行的。首先,我们不需要在软件开发上投入任何资金。其次,我们自己设计软件。最多,我们去图书馆找书,在实验室做项目。通过老师的教导和学生的帮助,这些都是免费的。第三,我们需要一台电脑。这些都是可以接受的。同时,成本非常低,可以提高自己的编程能力。此外,基于Scrapy框架开发的w网站爬虫系统,对于很多用户来说,可以提高他们的工作效率以及收集数据。所以从经济方面来说,这个项目它是可行的。3.1.2技术可行性本课题采用python语言,开发平台采用pycharm,pycharm具有完整的一套功能,便于初学者使用和代码提示,让我使用起来更轻松。Scrapy座位一个比较成熟的爬虫框架,决定了scrapy框架之后,让我们讨论用python语言编码的优点:速度、简单性和高可用性。同时,bdp工具有着可视化和稳定性的俩大优势。所以从技术方面来说,这个项目也是可行的。3.2功能需求分析本系统主要实现爬取链家网数据的功能,由于链家网反爬技术很严格,如果不重视这一点的话,该系统则无法正常进行爬虫获取数据。所以需要同时采用代理池和cookie池着两个技术,以逃脱链家网的检测为目的,爬下来需要使用bdp工具进行数据的简单分析与可视化。总的来说,主要是网站爬虫数据,cookie池,代理池这几大部分去实现这个系统的功能。Item模块可以对所需要爬取的数据进行字段的定义,而cookies模块则是给防止在爬取过程钟出现403状态,在Middleware这个文件钟对cookies和代理池进行相关配置。而代理池模块能够防止链家网对一个IP进行封禁,进行随机代理的获取,spider模块则是爬虫的主程序所在。启动的时候需要先启动cookie池,再启动代理池,最后启动爬虫主程序。其中BDP的可视化工具要使用用来分析爬取到的数据,
3.3需求概述爬虫项目的设计与实现涉及多方面的理论、步骤、方法和技术,本项目还有许多新的问题需要解决,需要在实际不断处理应用中积累和完善,并且做进一步的分析和开发。爬虫需要对链家网进行数据的爬取,并通过scripy的下载器,以CSV格式存储下来,其中尤其是代理池和cookies池的开发比较麻烦,需要完成整个系统的开发,架构设计以及代码编写,其中爬取的数量质量要较高,属性值要全,同时爬取的速度要够高,比如每秒钟能够爬取上千条数据,面对链家网的反爬虫,要有足够的手段去进行反制,代理池中的一些代理也可能会出现不可用的情况,所以代理池要拥有自动判断代理状态的功能,并可以进行更换,并通过相应的可视化工具,对数据进行一个分析与总结,并做出分析的图表,对广州的房价相关数据进行分析,其中表格要够直观和容易让用户看懂。3.4数据获取在系统数据分析里,一个非常重要的一环就是数据获取。因为系统的数据分析是基于数据来展开的。爬虫获取数据前得明确哪一类数据可以帮助我们分析房价。经过筛选和分析之后确认了数据目标并获取。根据本次项目,需要获取的数据主要通过Python爬虫获取广州市不同地区的房价数据,例如靠近地铁,市中心,房价单价等内容。3.5数据分析在确认获取数据的目标并得到了房价数据之后,下一步就是做分析数据。本次系统主要是研究每个不同地区的房价信息去分析整个广州市的房价情况。3.6数据展示数据展示是指将数据进行可视化,让用户方便更加清晰地了解到该系统的数据。此系统的数据可视化图表主要是以五种形式存在,分别是:表格、词云图、分布图和柱状图来分析结果。
第四章系统总体设计4.1爬取对象简介本文实现的爬虫将以“链家网”为爬虫对象,爬虫房屋面积、小区名称、总价、房型、面积、单价、类型以及日期。选择“首页链家网”作为爬行对象,可以使我接触和学习到许多互联网技术和内容,如网页结构元素的分析、登录验证管理机制、好友交互网络的设计与实现等许多细节,图图4-1链家网4.2总体架构设计爬虫测试程序主要分为三个数据存储模块:捕获数据模块、网页规则预置模块和数据存储模块。网页规则的预置模块负责的是设置爬虫程序从网页中获取的信息和数据存储格式,替换多个用户的代理,替换cookie。网页的抓取数据模块主要负责从程序定义的初始url中抓取发送到网页的信息,进行初步的网页信息提取和返回,并根据预先返回抓取结果的网页信息分别调用不同的回调处理函数。后续的抓取数据模块进一步的分析了网页抓取数据模块的结果,确定其是否是合法的网页抓取结果,并将其存储在数据库中或将此URL传输给调度器以等待调度抓取。图4-2架构图4.3反爬机制反爬是许多网站采取的一项保护措施。不同的网站采用不同的防爬策略,因此本系统实现了常见的防爬策略,充分保证了系统运行不受防爬机制的影响。反爬升策略如下。4.3.1设置DOWNLOAD_DELAY该转换文件的跳转参数为:scrapy在同一个跳转网站两个不同的跳转页面之间的每进行一个跳转可能都会需要等待很长的一段时间。我们通常可以在setting.py文件里面对它进行如下设置:download_delay=3s;4.3.2使用cookies池可以有效率的防止爬虫,防止被屏蔽。在项目目录下创建cookie目录,并在目录下创建项目代码。部分核心代码展示如下:由于cookies我们选择存储在redis内,所以在conf文件中有如下配置:#Redis数据库地址REDIS_HOST='localhost'#Redis端口REDIS_PORT=6379#Redis密码,如无填NoneREDIS_PASSWORD=None#产生器使用的浏览器BROWSER_TYPE='Chrome'#产生器和验证器循环周期CYCLE=120#API地址和端口API_HOST=''API_PORT=5000#产生器开关,模拟登录添加CookiesGENERATOR_PROCESS=True#验证器开关,循环检测数据库Cookies是否可行,不可行删除VALID_PROCESS=False#API接口服务API_PROCESS=True
第五章爬虫具体实现5.1爬虫目录结构图5-1代码结构图5.2预设模块首先我们对那些需要通过爬虫爬取的数据类型需要进行规定。在item.py文件中,根据要求定义字段和数据类型。以下为定义爬取数据的字段代码:classLianjiaItem(Item):title=Field()community=Field()model=Field()area=Field()price=Field()average_price=Field()url=Field()city=Field()focus_num=Field()5.3抓取模块爬虫设计的目的是获取房子的相关信息。该爬虫是模拟浏览器的行为,所以手动操作浏览器的过程,即抓取信息的过程,在爬行之前应该是清晰的。首先打开网站,输入一个house信息,然后进入overview页面(称为第一级页面),检查该页面的源代码信息,发现这里包含的信息不够完整。需要单击一个信息链接进入详细信息页面(称为二级页面),根据分析里面的前端代码,选择里面的xpath路径,这里包含了爬取想要的所有信息。以下为spider代码:5.4cookie池链家的反扒爬技术非常专业,我们必须增加防范反爬虫的措施,才能成功的爬到数据,而且必须将爬虫拥有登录的功能,否则将会导致403状态。所以在这里我们实现一个Middleware,为每个Request添加随机的Cookies。图5-2cookie架构5.5代理池链家有另一个反爬措施,就是检测到同一IP请求量过大就会出现414的情况。遇到这样的情况我们可以切换代理。本文使用了代理池随机获取代理即可避免出现414状态,代码如下所示:在本系统中共采用以下代理,以防止被屏蔽:/free.php?proxy=in_hp/free-http-proxy//free/anonymous/%E9%AB%98%E5%8C%BF//图5-3代理池架构5.6运行截图在pycharm中启动cookie池获取,运行截图如下所示 图5-4cookie获取运行截图在获取了c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 富士康终止合同协议书
- 合同签订后三方协议书
- 科研献血协议书
- 投资人和运营人协议书
- 恋爱买房分手有协议书
- 喝酒前先签免责协议书
- 结对合作协议书
- 员工大饭堂承包协议书
- 电费起码协议书
- 终止谣言协议书
- 应急救援安全应知应会题库
- 2024年广东高校毕业生“三支一扶”计划招募笔试真题
- 5年级语文下册看拼音写词语汉字生字扩词日积月累专项练习电子版
- 2025至2030年中国护腰带行业投资前景及策略咨询报告
- 2025年山东省聊城市东昌府区中考二模语文试题(含答案)
- 2025年“六一”少先队新队员入队仪式主持词
- 空调岗位试题库及答案
- 2024纺织机械操作流程掌握试题及答案
- 2025年贵州水投水库运营管理西秀有限公司招聘笔试参考题库附带答案详解
- 2025年第六届(中小学组)国家版图知识竞赛测试题库及答案
- 最全可自由编辑的中国各省市地图
评论
0/150
提交评论