主页 > 财经要闻 > 财经人物 >

华研数据:国庆去哪玩? 才发现...

来源: 时间:2017-10-05 05:41 作者:
    金秋九月,丹桂飘香,在这秋高气爽,阳光灿烂的收获季节里,我们送走了一个个暑假余额耗尽哭着走向校园的孩子们,又将迎来一伟大的国庆长假。

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

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

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

  地图 API 和 echarts

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

  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=搜索地点&;region=&;from=mpl_search_suggest&;page=页数

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

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

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

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

  •   地址的匹配使用 re.sub() 函数去除了 n 多复杂信息,这点后面解释。

  输出本地文本

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

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

  经纬度 API

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

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

  网址:http://api.map.baidu.com/geocoder/v2/?address=地址&;output=json&;ak=百度密钥,修改网址里的“地址”和“百度密钥”,在浏览器打开,就可以看到经纬度的 json 信息。

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

  百度密钥申请方法:http://jingyan.baidu.com/article/363872eccda8286e4aa16f4e.html

  这样我就可以根据爬到的景点地址,查到对应的经纬度辣!Python 获取经纬度 json 数据的代码如下:

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

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

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

  在设置获取经纬度的地址时,为了匹配到更准确的经纬度,我选择了匹配景点地址,然而,景点地址里有各种神奇的地址,带括号解释在 XX 对面的,说一堆你应该左拐右拐各种拐就能到的,还有英文的……

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

  然而,就算去掉了复杂信息,还有一些匹配不到的景点地址,于是我使用了嵌套 try,如果景点地址匹配不到;就匹配景点名称,如果景点名称匹配不到;就匹配景点所在区域,如果依然匹配不到,那我……那我就……那我就跳过ㄒ_ㄒ……

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

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

  网页读取json文件

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

  echarts 需要在实例页面,点击页面右上角的 EN 切换到英文版,然后点击 download demo 下载完整源代码。

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

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

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

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

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

  后记

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

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

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

  热门景点热力图

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

  热门景点示意图

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

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

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

  热门景点销量Top20

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

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

  主要城市热门景点数

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

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

  主要城市热门景点级别

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

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

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

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

  各省旅游景点销售起步价

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

  • 查看更多
  • 9月份各大银行最新存款利率表

    机构发布的各银行存款利率显示,农行、建行、交行、招行的存款利率最低,其中一年期利率只有1.75%,而渤海银行、上海银行的存款利率则比较高,一年期存款利率为2.1%,两者利率相差0.35%。 如果有两个储户分别把10万元存在农行和上海银行,前者一年能获得...

    最新利率表 日期:2017-09-30 07:22:28

  • 9月份各大银行最新存款利率表

    机构发布的各银行存款利率显示,农行、建行、交行、招行的存款利率最低,其中一年期利率只有1.75%,而渤海银行、上海银行的存款利率则比较高,一年期存款利率为2.1%,两者利率相差0.35%。 如果有两个储户分别把10万元存在农行和上海...

    各大银行利率 日期:2017-09-30 06:40:33

  • 购房贷款利率房贷利率表一览(无锡)

    最新消息 无锡全面告别首付三成时代! 首套房首付四成, 利率上浮10%(5.39), 二套房首付四成, 利率上浮20%(5.88), 部分银行已经停止房贷业务。 妈妈们应该都知道 早期办房贷的时候还能有折扣 8折、85折 然而后面陆续变成了9折,9...

    各大银行利率 日期:2017-09-30 06:39:19

  • 各大银行最新房贷利率情况表(广州)

    目前广州已经有数家银行调整了贷款利率,其中四大银行的贷款利率已经全部上调,即使是购买首套房,贷款利率也全都上调了5%。而二套房或多套房的,除了要求首付7成外,利率更是上浮了15%。 另外还有一些银行贷款利率上浮高达20%,而有的...

    各大银行利率 日期:2017-09-30 06:38:43

  • 2017各大银行利率大比拼:哪家银行存款利率最高?

    2017各大银行存款利率大比拼 哪家银行存款利率最高 新闻背景: 银行信息港获讯:中国人民银行决定,自2015年10月24日起,下调金融机构人民币贷款和存款基准利率,以进一步降低企业融资成本。 其中,金融机构一年期...

    各大银行利率 日期:2017-09-29 00:57:30

  • 各大银行最新住房房贷利率表 大部分银行取消首套房房

    随着银行信贷政策收紧,湖州部分银行房贷产品又一次收紧,眼下,湖州购房者还能拿到怎样的房贷利率?成为很多人关注的焦点。 目前湖州大部分银行除了取消了首套房房贷利率优惠,执行基准利率以外,与四月份相比各个银行均提高了二套房首...

    各大银行利率 日期:2017-09-29 00:42:30

  • 2017各大银行最新银行审批标准及贷款利率

    2017各大银行最新银行审批标准 1、汇丰银行:面积45平米以上,只接受商品房。要求客户群体公务员事业单位以及世界500强,目前只接受主城区,以及江宁栖霞部分楼盘。 2、花旗银行:面积50平米以上,1996年以后的房子,房改房不做,离婚不...

    各大银行利率 日期:2017-09-29 00:42:30

  • 查看更多
  • 查看更多
  • 查看更多
  • 查看更多
  • 查看更多
  • 查看更多
  • 查看更多
  • 查看更多