搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > CUDATEK酷达智能 > 国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

CUDATEK酷达智能 2017-10-30

CUDATEK是深度学习软硬件解决方案专家,提供GPU硬件解决方案;CUDA解决方案专家; 面向制造业,影视动漫娱乐硬件解决方案;专业计算金融GPU解决方案;IVA GPU软硬件解决方案。

来源:简书

http://www.jianshu.com/p/b7627e67b6b9

金秋九月,丹桂飘香,在这秋高气爽的收获季节里,我们送走了一个个暑假余额耗尽哭着走向校园的孩子们,又将迎来一伟大的国庆长假。

那么问题来了,去哪儿玩呢?百度输了个“国庆”,出来的第一条居然是“去哪里旅游人少”……emmmmmmm,因缺思厅。

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

于是我萌生了通过旅游网站的景点销量来判断近期各景点流量情况的想法(这个想法很危险啊)。所以这次的目标呢,是爬去哪儿网景点页面,并得到景点的信息,大家可以先思考下大概需要几步。

百度的地图 API 和 echarts

因为前几次爬虫都是爬一些文本信息,做一下词云之类,我觉得:没!意!思!了!这次正好爬的是数据,我决定用数据的好基友——图表来输出我爬取的数据,也就是说我要用爬取的景点销量以及景点具体位置来生成可视化数据。

 

安利一下百度的地图 API 和 echarts,前者是专门提供地图 API 的工具,听说好多 APP 都在用它,后者是数据处理居家旅行的好伙伴,用了之后,它好,我也好(隐约觉得哪里不对)。

 

API 是什么,API 是应用程序的编程接口,就好像插头与插座一样,我们的程序需要电(这是什么程序?),插座中提供了电,我们只需要在程序中写一个与插座匹配的插头接口,就可以使用电来做我们想做的事情,而不需要知道电是如何产生的。

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

引入数据后的百度热力图

 

举个例子来讲,A想要把写完的小说出版成书,可是怎么出书捏?A不会呀,这时候A发现某出版社提供了出版服务,出版社表示只需要提供小说的正文、以及一个设计的封面就可以啦,于是A将小说保存成了word格式,又画了个封面jpg图,发给了出版社,没过多久米酱就拿到了一本装订好的书啦(此段纯属虚构,专业出版人士尽管打我,我不会承认的)。


在A出书的过程中,A并不需要知道出版社是怎么印刷这个书的,也不需要知道是怎么装订这个书的,A只需要提供出版社所要求的东西即可。

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

通过 API 对接的开发者与服务商

确定输出文件

有人可能说,我已经懂了API 是啥意思了,可是咋个用呢。关于这一点,我很负责任的告诉你:我也不会。


但是!百度地图提供了很多 API 使用示例,有 html 基础,大致可以看懂,有 js 基础就可以尝试改函数了(不会 js 的,我默默地复制源代码),仔细观察源代码,可以知道热力图生成的主要数据都存放在 points 这个变量中。

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

这种[{x:x,x:x},{x:x,x:x}]格式的数据,是一种 json 格式的数据,由于具有自我描述性,所以比较通俗易懂,大概可以知道这里的三个值,前两个是经纬度,最后一个应该是权重(我猜的)。

 

也就是说,如果我希望将景点的热门程度生成为热力图,我需要得到景点的经纬度,以及它的权重,景点的销量可以作为权重,并且这个数据应该是 json 格式的呈现方式。

 

echarts 也是一样滴(*^__^*)。

爬取数据

这次的爬虫部分是比较简单的。分析网址(去哪儿景点)→爬取分页中信息(景点经纬度、销量)→转为 json 文件。

 

分析去哪儿景点页的网址,可得出结构:

http://piao.qunar.com/ticket/list.htm?keyword=搜索地点

®ion=&from=mpl_search_suggest&page=页数

 

这次没有用正则来匹配内容,而使用了 xpath 匹配,非常好用。

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

这里把每个景点的所有信息都爬下来了(其实是为了练习使用 xpath……)。


使用了 while 循环,for 循环的 break 的方式是发现无销量时给 i 值赋零,这样 while 循环也会同时结束。


输出本地文本

为了防止代码运行错误,维护代码运行的和平,将输出的信息列表存入到 excel 文件中了,方便日后查阅,很简单的代码,需要了解 pandas 的用法。

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

百度经纬度 API

非常悲伤,(ಥ﹏ಥ)我没找到去哪儿景点的经纬度,以为这次学(zhuang)习(bi)计划要就此流产了。(如果有人知道景点经纬度在哪里请告诉我)


但是,enhahhahahaha,我怎么会放弃呢,我又找到了百度经纬度 API。

 

网址:

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

百度密钥申请方法:

http://jingyan.baidu.com/article/363872eccda8286e4aa16f4e.html

 

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

观察获取的 json 文件,location 中的数据和百度 API 所需要的 json 格式基本是一样,还需要将景点销量加入到 json 文件中,这里可以了解一下 json 的浅拷贝和深拷贝知识,最后将整理好的 json 文件输出到本地文件中。

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

 

于是就有了第三章中复杂的去除信息(我终于圆回来了!)。

 

 

身为一个景点,你怎么能,这么难找呢!不要你了!

 

这里生成的三个 json 文件,一个是给百度地图 API 引入用的,另两个是给 echarts 引入用的。

网页读取 json 文件

将第二章中所述的百度地图 API 示例中的源代码复制到解释器中,添加密钥,保存为 html 文件,打开就可以看到和官网上一样的显示效果。


 

根据 html 导入 json 文件修改网页源码,导入 json 文件。

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

这里使用了 jQuery 之后,即使网页调试成功了,在本地打开也无法显示网页了,在 chrome 中右键检查,发现报错提示是需要在服务器上显示,可是,服务器是什么呢?

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

百度了一下,可以在本地创建一个服务器,在终端进入到 html 文件所在文件夹,输入 python -m SimpleHTTPServer,再在浏览器中打开 http://127.0.0.1:8000/,记得要将 html 文件名设置成 index.html 哦!

后 记

因为注册但没有认证开发者账号,所以每天只能获取 6K 个经纬度 API(这是一个很好的偷懒理由),所以我选择了热门景点中前 400 页(每页 15 个)的景点。


结果可想而知,(ಥ﹏ಥ)为了调试因为数据增多出现的额外 Bug,最终的获取的景点数据大概在 4500 条左右(爬取时间为 2017 年 9 月 10 日,爬取关键词:热门景点,仅代表当时销量)。

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

热门景点热力图

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

热门景点热力图

这些地图上很火爆的区域,我想在国庆大概是这样的

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...
国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...
国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

将地图上热门景点的销量 Top20 提取出来,大多数都是耳熟能详的地点,帝都的故宫排在了第一位,而大四川则占据了 Top5 中的三位,排在 Top20 中四川省景点就占了 6 位。

如果不是因为地震,我想还会有更多的火爆的景点进入排行榜的~这样看来如果你这次国庆打算去四川的话,可以脑补到的场景就是:人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人……

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

热门景点销量Top20

 

于是我又做了一个各城市包含热门景点数目的排行,没想到在 4 千多个热门景点中,数目最多的竟是我大浙江,是第二个城市的 1.5 倍,而北京作为首都也……可以说是景点数/总面积的第一位了。

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

主要城市热门景点数

 

这些城市有辣么多热门景点,都是些什么级别的景点呢?由下图看来,各城市的各级别景点基本与城市总热门景点呈正相关,而且主要由 4A 景区贡献而来。

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

主要城市热门景点级别

 

既然去哪些地方人多,去哪里景多都已经知道了,那再看看去哪些地方烧得钱最多吧。

 

下图是由各城市景点销售起步价的最大值-最小值扇形组成的圆,其中湖北以单景点销售起步价 600 占据首位。

 

但也可以看到,湖北的景点销售均价并不高(在红色扇形中的藏蓝色线条)。而如果国庆去香港玩,请做好钱包减肥的心理和生理准备(•̀ω•́)✧。

国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...

各省旅游景点销售起步价

 

好了,看完分析你知道既穷又懒的你怎么给自己找个理由窝家里了吧,知道下次给自己找理由的时候就要用数据说话了吧,知道数据是爬虫得来的了吧!

 

其实,看完也不知道去哪儿,要不来cudatek学习深度学习课程吧


业务咨询与购买:karena@cudatek.com



上海酷达计算机科技有限公司

TEL 021-54181199




版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《国庆去哪儿玩?用Python爬取了全国4500个热门景点,才发现...》的版权归原作者「CUDATEK酷达智能」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注CUDATEK酷达智能微信公众号

CUDATEK酷达智能微信公众号:cudatek

CUDATEK酷达智能

手机扫描上方二维码即可关注CUDATEK酷达智能微信公众号

CUDATEK酷达智能最新文章

精品公众号随机推荐