基于python的旅游信息爬取以及数据分析.docx
- 文档编号:13092893
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:36
- 大小:2.07MB
基于python的旅游信息爬取以及数据分析.docx
《基于python的旅游信息爬取以及数据分析.docx》由会员分享,可在线阅读,更多相关《基于python的旅游信息爬取以及数据分析.docx(36页珍藏版)》请在冰点文库上搜索。
基于python的旅游信息爬取以及数据分析
基于python的旅游信息爬取以及数据分析
TourisminformationcrawlinganddataanalysisbasedonPython
摘要
随着计算机网络技术的发展,近年来,新的编程语言层出不穷,python语言就是近些年来最为火爆的一门语言,python语言,相对于其他高级语言而言,python有着更加便捷实用的模块以及库,具有语法简单,语句清晰的特点,使得它在代码的编程中,变得更加简洁容易上手,另外,python应用特别广泛,作为是一门应用性广泛的语言,无论是游戏的开发,还是数据的爬取,再到网站的搭建,python都能轻松驾驭,其中,爬虫的应用,更加使得python这门语言为人所知。
作为网络搜索引擎的组成成分之一,爬虫能够有效的为我们搜索和爬取有用的信息,减少人工的操作,十分方便,在自己定义的条件下,采集得到某些网页的信息,比如房价、股票、招聘信息等,对于这些信息,我们可以对数据进行处理,从而得到我们所需要的信息。
本文通过python实现了一个马蜂窝旅游网站的爬虫信息搜集,并对马蜂窝网站中采集得到的数据进行分析处理,得到想要的数据。
关键词:
PythonHtml爬虫旅游马蜂窝
Abstract
Withthedevelopmentofcomputernetworktechnology,inrecentyears,newprogramminglanguageshaveemergedendlessly.Pythonisthemostpopularlanguageinrecentyears.Pythonhasmoreconvenientandpracticalmodulesandlibrariesthanotherhigh-levellanguages.,Hasthecharacteristicsofsimplesyntaxandclearstatements,whichmakesitmoreconciseandeasytouseintheprogrammingofcode.Inaddition,Pythonisparticularlywidelyusedasaversatilelanguage,fromwebsiteconstructiontodataprocessingtogadgets.Thedesignofsmallgamescanbedonebypython.Amongthem,theapplicationofreptilesmakespythonalanguagemoreknown.
Webcrawlerscannotonlycollectnetworkinformationforsearchengines,butalsoactasadirectionalinformationcollector.Undercertainconditions,theycancollectinformationaboutcertainwebpages,suchashouseprices,stocks,andrecruitmentinformation.Fortheseinformation,wecananalyzethedataProcessittogettheinformationweneed.
Thisarticleistoimplementacrawler'sinformationcollectionandanalyzethedatacollectedbypythontogetthedesireddata.
Keywords:
PythonHtmlreptiletourismMafenwo
第一章引言
1.1背景
随着近些年来网络的快速发展,网络进入了大信息时代,网络上的信息呈现爆炸式的飞涨,五花八门的信息显示,这使得人们在网络上寻找自己所需要的信息时,显得越来越困难,当然,一个问题的出现,必然有一个方法去对应,信息的剧增,与之对应的,便是搜索引擎的出现,比如google、XX等等,搜索引擎通过搜集网络上数以万计的不同类型的网页信息,并为其建立起索引,通过搜索引擎,即使网络上的信息种类繁多,我们还是能够通过关键词的搜索,搜索得出与之对应的信息的网页。
网络爬虫是一个自动化的程序,也是搜索引擎的组成部分之一,不同的搜索引擎,可以通过不同的搜索需求,选择合适的爬虫方法来搜集网络上的信息,传统网络爬虫主要从一个url开始,通过爬取目标网页的url,观察其组成结构特点,按照结构规律,构建新的url,不停的将新的url放入队列中,循环爬取,最后直到需求完成为止。
优秀、高效的爬虫程序,能够使人们网络上找到更加精准的信息。
本文通过python语言,实现了一个对于马蜂窝旅游网站的信息采集分析,通过对马蜂窝旅游城市的城市编号爬取,根据马蜂窝网站的网址规则,通过拼接得到马蜂窝旅游网站的城市url,根据获取得到的url,进入马蜂窝旅游城市页面,观察页面组成结构,通过标签定位,爬取我们所需要的页面信息,将其保存入本地文件,再对文件里面的数据进行数据处理,可视化分析,告诉你旅游去哪儿好。
1.2国内外研究情况
python作为搜索引擎技术组成部分之一,自九十年代初诞生了第一个网络爬虫以来,python技术已经经过了20多年的发展,经过这么多年的发展,python技术也趋于成熟,逐渐覆盖了网页开发、游戏开发、爬虫分析可视化、脚本开发等等专业领域,并通过其简单易懂、代码编写效率高的特点,成为目前最为火热的开发编程语言,也正是其应用广泛,上手容易,语法强大,代码可读性强的特点,受到了很多人的喜爱,让很多人爱不释手。
同时,由于不同的人对于数据爬取内容的差异,常常会产生不同的需求,因此爬虫主要可以分为以下两种:
1、通用爬虫:
通用爬虫其实很简单,它的作用就是将网络上的网页下载下来,保存到本地,其实就是生成一个副本,作为网页的备份。
所以通用搜索一般得到的都是网页,对于用户来说,网页的内容十之八九都是没用的,要的只是网页中的某些特定的信息。
所以就有了我们第二种爬虫方法。
2、聚焦爬虫:
聚焦爬虫是比通用爬虫更加复杂一点,它不同与通用爬虫,通用爬虫是将网页保存到本地,但是聚焦爬虫,它不会将整个网页爬取下来,它会筛选得到网页中我我们所需要的东西,而筛选的条件规则是由我们自己定义的,相比通用爬虫,聚焦爬虫它做的工作更多,但是得到的数据更加符合我们的要求,本文所实现的爬虫,就是通过聚焦爬虫所实现的。
第二章爬虫语言以及工具的介绍
2.1Python介绍
2.1.1Python语言的产生以及发展
Python是上世纪八十年代末开始由Guido开发,九十年代初发行的一门编程语言,其作者参与过ABC语言的开发,所以对ABC语言其中的弊端有所了解,认为ABC语言虽然语言优美,功能强大,但是却受限于它的非开发性,没有得到广泛的应用,因此想开发出一门新的语言,能够摒弃掉ABC语言的弊端,打破这个限制,正是如此,python就诞生了,python刚刚推出不久,就迅速得到了各行人士的青睐,经过多年以来的不断改善,python语言已经逐渐稳固它在编程语言中的地位。
根据从TIOBE网站上得到的数据,从2002年开始,python语言就趋于一个稳定上升的状态,呈线性增长,正是如此,python成为了近年来最受欢迎的编程语言之一。
图2.1.1计算机编程语言热门排行榜
2.1.2Python语言的特色
首先,Python是一门强大、灵活的语言,与C、C++、Java等语言相比较,python的语法简单优雅,往往不用通过很复杂的代码,就能实现强大的功能,例如Java需要100行代码才能实现的功能,python往往只需要一半或者更加少,大幅度降低了学习与使用的难度,很适合人们的学习。
其次,python是一门开源免费的语言,简单的来说,就是不花钱就能使用,我们可以直接下载安装运行,也能对其源码进行修改,十分便捷。
再次,效率极高,python被称为胶水语言,拥有强大的第三方库,人们往往只需要将库下载调用,在库的基础上进行开发,就可以实现很多复杂的功能,节省了不少时间,避免了重复造轮子的现象。
最后,python语言可移植性强,正是由于python的开源性,使得python拥有了良好的可移植性性能,让其可以被移植到其他的平台之下,例如我们所熟知的window系统,Linux系统,安卓系统和苹果系统等等。
总而言之,python是一门用途广泛,又容易上手的编程语言。
2.1.3Python语言的缺点
Python虽然拥有众多的优点,但是事物往往很难做到十全十美,编程语言也一样,python虽然简单优美,但是运行速度相比其他编程语言来说,却显得缓慢,对比C语言来说,C语言是先编译后运行的,编译的时候就已经将代码转化成了CPU所能执行的机器码,而python是解释性语言,因此它的代码在运行的过程中,需要先将代码编译成CPU所能理解的机器码,这个过程就需要耗费很多时间,导致了python的运行缓慢。
另外,由于python的开源性,导致了python代码无法加密,实际上,如果我们要发布一个python程序,其实就需要将我们所敲打的源码发布出去,这样别人就直接得到了你的源码,能够轻易的使用并修改你的源码,而C语言是先编译后运行的,它的发布是发布已经编译后的机器码,别人是很难逆推得到源码的,其实,基本所有的编译性语言,都不需要担心源码的泄露,而像python这种解释性的语言就比较难了,因此在保密度这一块,python还是略显劣势。
2.2URL介绍
2.2.1URL的定义
URL,通俗的来讲的话,URL其实就是网络地址,每一个URL,就代表着特定的资源在网络或者电脑上的位置,这个位置既可以是电脑的本地磁盘路径,也可以是局域网上的某个计算机,但是,总的来说,URL更多的是指网络上的网页站点。
而这里所说的特定的资源,可以是一个HTML界面、也可以是一张照片、一个文本、或者是一个文件等等。
2.2.2URL的解读
URL是由不同的组件组成的,就拿本文所要爬取的网站马蜂窝来说,马蜂窝的网站地址为:
(1)这是一个https协议的网站,它告诉了浏览器访问资源的时候,应当使用https协议,在目前,网络上使用的协议大多为HTTP或者https(加密)。
(2),是域名,指向你所要访问的资源的服务器端,这里也可以使用IP地址显示。
(3)mdd,这里表示的是访问资源在该服务器上的路径,但是有时这个路径会出错,最常见的问题就是该路径的资源已经被移走或者不存在,导致寻找失败。
2.3HTML介绍
2.3.1HTML的定义
HTML,是一种超文本链接标示语言,是网站搭建的基本骨架,简单的来说,HTML就是网页的载体,它主要由两部分组成,一个是head,另一个是body,head是描述浏览器的主要信息,body是用来装载网页界面的主体内容,网页上所看到的文字信息或者图案,都是存在body里面,在HTML界面中,存在着超级链接,所谓的超级链接,其实就是将URL地址放入了界面中,人们可以通过鼠标的点击,可以使浏览器对其进行解析,并能够快速便捷的跳转到URL指定的资源界面,正是如此便捷的操作,使得HTML受到了很多编程人士的喜爱,也是它成为应用广泛的原因之一。
2.3.2爬虫与HTML
本文之所以介绍HTML界面,其实是和我们爬虫的设计有一定的关联,在HTML中,为了方便的网页内容的处理,在HTML加入了标签这种东西,标签是由<>组成,其中分为起始标签和结束标签,结束标签在<>的基础上,加多一个/,即>,而<>中的内容,则是根据自己所要编写的内容决定,例如我们想要定义一个标题,则需要这么写:
在我们的爬虫中,我们就是需要根据这些标签的位置,来爬取我们所需要的信息,根据标签的定位,观察标签地位的规则,获取需求标签位置下的内容,通过字符分割或者直接爬取的方式,将其内容中有用的信息存储下来,达到我们爬取的目的。
图2.3.2HTML下的标签
2.4爬虫工具介绍
2.4.1Chrome
本文进行爬虫的浏览器选择的是chrome浏览器,之所选择chrome浏览器,首先,chrome浏览器的界面简介,在所有浏览器中,chrome浏览器算是性能最好的浏览器,其次,chrome浏览器全面支持HTML,这对于我们之后的爬虫有良好的帮助,在兼容性方面,chrome浏览器的兼容性问题很好,使用过程会给人一种良好的体验,另外,爬虫所使用的selenium库,与其他浏览器的驱动存在一定的bug,导致某些功能无法实现从而出错,我们在使用selenium时,需要在chrome浏览器对应的版本下载安装Chromedriver驱动程序,并放入python文件下,便于我们之后的调用,最后,chrome浏览器推出了headless模式,即无界面浏览模式,在没有浏览器界面的情况下,依旧能实现与有浏览器界面相同的操作,这对于我们爬虫抓取来说,是一个十分便捷的功能,但是在本文中,为了更加直观的表现出爬虫过程,我并没有把无界面浏览的代码写上去。
2.4.2Pycharm
我们在做一件事情的时候,既要有一定的头脑,也需要趁手的工具,才能有更好的效率,编程也是如此,虽然python安装后有自带的编辑器IDLE,但是对于我们来说,IDLE对于大多数新手乃至学习过程中的人们并不太友好,没有提示,没有补全,只有最后的运行结果或者报错,这对于大多数人来说,是一种很难受的体验,大大的降低了人们学习过程中的效率和导致了宝贵时间的流逝。
所以说,只有选对了正确的工具,才能使工作的效率以及代码的质量得到提升,在本文的爬虫过程中,选择的工具是Pycharm,Pycharm是python的一种IDE,能够帮助人们在进行python语言编写的过程中,节省时间,提高生产效率,提高代码的质量,在使用的过程中,如果出现一些语法错误或者拼错代码,Pycharm能够实现实时监测,一旦发现错误,将会有明显的下划线报红提示,能够使人第一时间发现错误,修改代码。
另外,Pycharm的补全功能也十分便捷,一行代码在编写的过程中,并不需要全部敲打,只需要有首字符提示,便能显示出与之对应的代码语言,十分的节约时间。
在程序运行出错的同时,会显示语句出错的地方,鼠标点击对应的出错点,就能实现智能跳转。
对于文件的管理来说,Pycharm也是优于IDLE,代码文件直接就在文件夹下,可以有多种不同的代码文件夹存在,需要哪些代码文件,很方便直接点击就能打开。
最后,Pycharm的debug检查,有时候会遇到代码不报错,但是却得不到自己想要的数据,这个时候,debug检测就派上大用场了,使用debug功能,能够看到代码的执行过程,从细节上找到代码陷入错误的地方,是一个很好用的功能。
所以,本文的爬虫爬取信息所使用的工具就是Pycharm。
第三章项目的需求以及设计分析
3.1项目的需求
如今,人们的生活质量越来越好,水平条件越来越高,也使得更多的人注意到身心的放松与娱乐,很多人在自己闲暇的时候,都希望能度过一个好的时光,正因为如此,旅游行业逐渐火热了起来,渐渐的进入到了人们的生活之中,但是很多人在选择旅游的时候却不知所措,因为他们不知道去哪里玩好,有什么好玩的,有什么好吃的,所以,本文设计了一次爬虫,爬取马蜂窝旅游网站的旅游信息,将信息数据进行分析,筛选出马蜂窝旅游网站的热门城市、热门城市景点、热门小吃等等的数据信息,让人们得以在众多的旅游城市选择中,找到那些热门景点以及热门的小吃,少走弯路,找到一个最适合自己旅游的城市,拥有一个愉悦快乐的假期旅游。
3.2项目的任务
首先,旅游,我们需要先确定下来一个城市,因此,我们任务要求第一件就是马蜂窝旅游城市中排行前10的热门城市各自为什么,其次,我们需要得到各个城市的景点数据,根据数据分析得出排行前15的热门景点为哪些,最后,爬取与美食相关的信息,得出旅游中最具代表性的美食前15的排行。
3.3设计分析
3.3.1城市编号的获取
首先,我们爬取旅游信息,肯定是爬取众多城市的旅游信息,不同的城市在马蜂窝旅游网站中的URL是不同的,但是,通过对比我们可以发现,在马蜂窝旅游网站中,所有的城市以及城市景点信息,都是由特定的五位数字或者六位数字组成的,这对于我们爬取不同城市的旅游信息是一个突破口,根据这个数字,我们就能拼接得到不同城市的不同URL地址,得到城市旅游的界面。
3.3.2城市信息的爬取
在获取得到城市编号后,我们就能得到马蜂窝旅游网站的城市的URL地址,通过地址我们就可以进入到城市旅游的界面,这个时候我们就需要考虑,我们应该爬取什么,抓取哪些信息,哪些信息是有用的,能够支持我们爬取信息后数据分析的可信度,在这里,我们是根据马蜂窝旅游网站里面不同城市的游记的数量、印象的标签数、特色美食的排行、购物娱乐的排行等等来得出的信息。
3.3.3爬取信息的处理
在我们得到城市的具体旅游信息后,最后就是数据的可视化处理,首先,我
需要将马蜂窝旅游网站中游记前10的热门城市、前15的景点标签类热门城市、前15的的餐饮标签热门城市、前15的娱乐购物标签类热门城市可视化处理,采用柱状图显示。
接着,我们对景点人气前15的城市景点、餐饮人气前15的城市美食、娱乐购物人气前15的城市娱乐可视化处理,采用的也是柱状图显示。
最后,我们对热门城市前20的热门城市进行热力图显示,这就是全部的信息处理可视化了。
图3.3程序流程图
第四章项目的实现
4.1城市编号获取的实现
4.1.1城市编号获取使用库的介绍
os库,python里面os库是用来处理各种文件和目录的,在os库里面,python提供了很多种方法,例如,access(path,mode),用于文件的权限检查,path是指文件路径,mode则拥有四个参数,可以分别检测出path路径下的文件是否存在,是否可读,是否可写,是否可执行。
与之对应的,chmod(path,mode),则是用于文件的权限修改。
Remove方法,则是用来删除path路径下的文件,os库的方法还有很多,这里就不一一举例出来了,os库其实就是python对于我们操作系统功能的一个普通操作,本文这里我们使用到的os库里,是调用了一个os.chdir(path),用来改变文件路径,使得我们爬虫保存下来的数据文件能够存储到指定的位置。
urllib库,python里面urllib库十分的便捷,它为我们提供了一系列的URL操作,这里要说明的一下就是,以前的python版本中,urllib与urllib2是分开来的,换句话说,urllib2是urllib的升级版,不过这两个又互相存在着不同点,它们所包含的函数有些是不互通,所以在python2.x中,它们是混合搭配使用的,无法相互替代的,但是在python3.x后,urllib2是合并到了urllib中,这里我们安装的python是3.x的,所以我们直接使用的就是urllib,在urllib模块中,我们需要的用到的就是方法是request,request可以帮助我们抓取URL下的内容,是最基础的HTTP请求模块,它也可以为我们爬虫实现一个伪装操作,我们可以通过添加Headers,将我们的操作伪装成一个浏览器,模拟我们人为的操作,类似于我们平常上网的操作,输入网址点击跳转,就能跳转到我们所需要访问的网页的步骤是相同的。
BeautifulSoup4库,BeautifulSoup4是我们爬虫所经常使用的一个库之一,在HTML界面中,数据的位置是有一定的规则和结构的,BeautifulSoup4就是一个可以根据HTML页面结构抓取我们所需要的数据的库之一,类似像BeautifulSoup4还有lxml和pyquery等等,这里使用BeautifulSoup4是因为BeautifulSoup4简单容易上手,而且它的文档容错率较高,对于我们这种数据抓取保存还是比较合适的,BeautifulSoup4使用soup可以直接获取得到节点的元素或者名称,但是在同级中有多个相同节点的时候,soup只会选择第一个,我们所爬取的内容很多都是同一节点下多个元素的数据,所以这里使用BeautifulSoup4里面的函数最多的就是find_all()与find(),find_all(name,attrs,recursive,text,**kwargs)能帮助我们查找符合括号中条件的所有元素中的参数,name所指的是命名为name的所有标签,attrs表示属性,例如id、title、class等等,这里的class由于是python的专有词,所以使用的时候,需要特殊处理下,我们只需要对其后面加下划线,就能解决,即class_,find()和find_all()使用差不多,但是使用find匹配的是第一个元素,有时候我们需要的是某一个元素下面下属的多个元素,所以这里我们有时候会使用到find()与find_all()的混合使用抓取所需要的元素下的数据。
Pandas库,pandas库是python中的一个科学计算库,它可以说是基于Numpy库的一个工具,这里的Numpy后面也会用到,他们最大的区别在于,Numpy是用于数值计算的,它是一个多维数组的容器,而pandas库更多的是用来做数据处理的,可以说是为了解决数据分析任务而衍生出来的一个工具,同时它也算是一个表格容器,pandas可以对数据进行导入、处理、输出、统计等等一系列的操作,能够对数据进行一个有序的整理,这里pandas库,首先我们使用到的是它的DataFrame,由于我们爬取的数据很多,如何将这些数据进行处理保存,这是一个问题,我们这里使用的是pd.DataFrame(),用于建立一个二维数组对象,再将数据放置进去这个对象里面,其次,有了数据之后,不同数据是在不同的地方爬取下来的,我们就需要对某些数据进行合并才能显示出效果来,这里我们就需要用到pd.concat()方法,可以对多个DataFrame对象进行合并,concat方法里有多个参数需要我们选择,具体怎么做要看我们需要什么,最后,pandas也为我们提供了文件数据的读取功能,我们第一步是将马蜂窝各个城市的专属数字爬取下来保存成一个Excel文件,后面第二部分会调用到这些数据,所以pandas的read功能就很好的解决了我们这个问题,通过pd.read_excle(),我们就能很好的打开excel文件,从而从中拿取我们所需要的数据。
Selenium库,Selenium用于网站的自动化测试,它适用于当前很多的主流浏览器,它的作用是用于模拟我们对浏览器的操作,如点击、下滑、跳转等等,同时,我们还需要下载对应的浏览器驱动来配合Selenium操作,实现操作目的。
4.1.2城市编号获取过程
首先,我们进入马蜂窝网站,我们需要爬取的是国内旅游信息,总所周知,中国的地区模块是由省份以及直辖市组成,我们可以在马蜂窝热门目的地国内省份开始寻找有用的信息。
按F12打开开发者工具后,我们将箭头点击页面中的省份名称,开发者工具就会直接定位跳转到箭头点击位置的当前页面标签下。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 python 旅游 信息 以及 数据 分析
![提示](https://static.bingdoc.com/images/bang_tan.gif)