用Python偷偷告诉你国庆8亿人都去哪儿浪?

Python|Pyppeteer获取去哪儿酒店数据(20) 本文以去哪儿为例,笔者将详细介绍使用pyppeteer获取去哪儿的酒店数据。如果对pyppeteer的使用以及知识点不太熟悉的同学,可往前查看本专栏前面介绍的pyppeteer知识点。接下来,我们言归正卷。跟着笔者直接往下看,使用pyppeteer获取去哪儿酒店数据的方法。(附带完整代码)这里稍微提醒一点,使用pyppeteer对页面元素进行定位不太熟悉的同学,可以仔细翻阅本专栏的前三篇相关知识点。我们进入目标网站的时候,一般都是全站。如果说,当我们想要目标城市对应的酒店数据的话,我们需要设定目标城市的编号 阅读详情
640?wx_fmt=png

图片来自 Pexels


据文化和旅游部消息称,预计 2019 年国庆旅游人次有望达到近 8 亿。

640?wx_fmt=gif

#国庆假期或有近 8 亿人次出游#这个话题还冲上了微博热搜榜。

640?wx_fmt=png
我仿佛已经看到了假期景区人山人海的画面!
640?wx_fmt=jpeg

640?wx_fmt=jpeg

左思右想,最后落脚到国庆长假的旅游上,能否用网络爬虫看看,十一长假哪些城市最堵?哪些景区最热门?
640?wx_fmt=jpeg

今天一起来看看,如何利用网络爬虫生成国庆期间的旅游热点图吧。

需求构思


制作一张旅游热点图,我们想要达到的效果是,在一张中国地图上面标注出旅游热点。


通过这张图可以知道哪些城市,或者哪些区域是十一期间的旅游热点。也就是说哪些地方在国庆期间去玩的人多。

640?wx_fmt=png

构思图


首先,我们要找一个数据源能够获取全国旅游信息。这里有一个思路就是订票信息,哪些景点的订票比较多,那么这些景点所在的城市就越热门。类似的售票网站比较多,例如:携程,去哪儿,途牛旅游之类的。


然后,需要分析网站上面的票务数据,将我们感兴趣的旅游热点信息爬取下来。分析信息的重点是针对网页 HTML 信息的解析。


之后,将分析完毕的信息按照一定格式保存到本地,由于下载的信息可能和最终展示信息存在偏差,所以需要做一些数据清洗和数据聚合的操作。


最后,将整理好的信息输入到地图上显示出来,这也是最后展示的环节。这里可以选择对外展示的方式,例如:点图,线图,或者热力图。

网站分析

全局预览


找了一圈旅游网站以后,发现在“去哪儿”的门票页面中,有一个对旅游景点热度的展示信息。


网页会根据不同类型景点(自然风光,文化古迹等)进行查询,查询的结果会显示景点名称,景点热度和城市信息。


如果我们将这些景点对应的区域的热度进行汇总,就可以知道哪些区域对应的景点热度了。


先打开去哪儿旅游,搜索“热门景点”。下面列出了各个地方的热门旅游景点。

640?wx_fmt=png

针对景点主题做了分类,在展示的列表中,有景点名称,景点级别,所在省市,以及热度。其中省市和热点是我们关心的数据。

URL 分析


640?wx_fmt=png

URL 分析图


打开 Chrome 的开发者工具来看看 HTML 页面的结构。URL 的规律很容易能够看明白:

  • Keyword 就是“热门景点”,它是个常量,每次请求填写这个就行了。

  • Subject 是景点分类,例如:自然风光,游乐场,文化古迹等等。这个需要一一罗列出来,是在一个变量后面用数组存放。

  • Page 是页数,如果我们要爬取所有的信息,需要一页一页往下翻,所以这个数字会不断增长。页面滑动到最下方的时候,会看到 Next 按钮,可以通过这个按钮将所有页面都遍历到。

640?wx_fmt=png

URL 全景图

页面元素分析


通过 Chrome 开发者工具中的元素选择器,可以清楚地看到元素的 HTML 标签。

640?wx_fmt=png

列表元素图

由于景点信息放在一个列表中,所以找到列表所在的元素,它放在 id 为“search-list”的 div 中。

也就是说在请求 URL 并获取 HTML 之后,我就需要找到“search-list”div 并且获取其中对应的项目信息。

获取了列表元素之后,再来看看每一项旅游纪录中的值如何获取。其内容放在”sight_item”的 div 中。

640?wx_fmt=png

列表中每项的示意图

接下来分别将景点名称,景点级别,所在省市,热度,地址分别做分析。并且记录他们元素的值在后面解析 HTML 的时候可以用到。

元素的 HTML 标签获取类似上面两个元素。把上面这些元素的 ID 或者 Class 可以先记录下来,在后面解析 HTML 的时候会用到。

爬虫准备


构思和分析都完毕了,我们需要编写代码来实现想法。但是,在这之前我们需要把开发环境以及需要的工具准备好。

由于涉及到网络爬虫,以及图形的展示。所以这里计划使用 Python 作为开发语言,IDE 环境使用 PyCharm,展示图表用到 Pyecharts。

普及一下 Pyecharts,Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。

而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,Pyecharts 就诞生了。

因此,Pyecharts 可以理解为用 Python 来实现的 Echarts 程序,可以在 Python 上面运行,并且提供良好的地理信息展示。

640?wx_fmt=png

Pyecharts 图标

另外 Pyecharts 的地理展示功能比较强大,这点也是我们需要利用的。

640?wx_fmt=png

Pyecharts 展示中国地图

针对 HTML 的解析我们使用了 BeautifulSoup。它是一个可以从 HTML 或 XML 文件中提取数据的 Python 库,它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。

640?wx_fmt=png

BeautifulSoup 官网图片

爬虫编码


万事具备只欠东风,让我们开始写代码吧,为国庆搬砖让我快乐。这里我们把程序分成两个部分来写,一部分是爬取旅游热点信息,另一部分是旅游热点地图展示。

爬取旅游热点信息


640?wx_fmt=png
程序流水图

先说一下获取旅游热点信息的思路,大约分为四步:
  • 开始准备必要的文件和引入组件包。

  • 组合变量 URL 并且做网络请求,请求不成功进行重试。

  • 下载 HTML 以后对其进行解析,找到旅游热点列表,列表项,分析具体旅游信息。

  • 把分析完的信息保存到 csv 文件中。


因为我们需要请求网络,解析 HTML,保存文件,所以需要引入一些 Python 的包:
  • 网络请求

  • HTML 解析

  • 读写 csv

  • 在请求头中伪装浏览器

  • 错误重试,等待时间

640?wx_fmt=png
接下来就是创建请求头,请求头中包括了请求的浏览器,语言,请求格式等信息。

这里我们是使用 fake_useragent 中 UserAgent 的 random 方法随机产生浏览器的信息。

这样在模拟浏览器访问网站的时候,每次请求都会随机模拟一种浏览器。例如:IE,Firefox,Chrome 等等。让网站认为是不同的人,用不同的浏览器来访问网站的。

640?wx_fmt=png

接下来生成一个 csv 文件,用 utf-8 格式保存。这个文件是用来存放爬虫信息。

在文件的表头,我们分别定义了,“区域”,“名称”等和景点相关的字段。在文件生成的时候就准备好这些列,等填入数据以后,可以方便查看。

640?wx_fmt=png

定义一个下载景点内容的函数,这个函数接受 URL 作为参数,然后通过 requests 对象下载景点内容。

640?wx_fmt=png

由于下载信息可能会遇到网络问题,导致下载失败。所以,我们需要定义一个下载失败函数,在下载不成功的时候重试下载。

640?wx_fmt=png

还记得之前分析的 URL 吗?景点的类型和分页是变量,这里我们定义一个生成 URL 的函数来处理这些变量。

我们会罗列需要搜索的景点类型在其中。Keyword 字段已经转换成 ACSII 码了,如果需要直接输入中文字符,可以使用 from urllib.parse import quote 来实现。

另外,我们的开始搜索的页面,使用 page=1,之后会解析页面中的“next”按钮,完成翻页的功能。

640?wx_fmt=png

好了,到此我们定义了文件,下载函数,重试下载函数,分类搜集函数,现在要定义最重要的 HTML 解析函数了。它的输入参数是景点类型和 URL 地址。

依次执行以下工作:
  • 下载 HTML,并且转换成 SOUP 对象。

  • 找到旅游景点的列表。找到 div 的 id 为‘search-list’的元素。用 soup 的 find 方法找到它。

  • 针对景点的项目进行遍历。在‘search-list’元素下面,通过 findAll 方法找到 class 是‘sight_item’的项目,并且对其进行遍历。

  • 解析具体景点信息:名称,区域,省市,热度,地址等等。

  • 找到翻页按钮,继续往下载后面的页面,并且再次解析。通过 find 方法找到 class 是‘next’的 a 标签。

640?wx_fmt=png

最后,执行 main 函数运行整个 Python 程序:
640?wx_fmt=png

640?wx_fmt=png

下载完成的 csv 图

csv 看上去比较凌乱,把文件通过 xls 打开,看看格式化以后的热点信息:

640?wx_fmt=png

整理以后的旅游热点图

旅游热点地图展示


好了旅游热点的信息已经抓到了,现在开始分析。这里建议将抓取和分析工作分成两块来进行。

因为,在抓取过程中会遇到网络问题,解析问题或者反爬虫的问题,而且抓取数据需要一段时间。

为了保证其独立性,所以信息抓取可以单独运行。当完成以后,把抓取的文件作为输入放到展示程序中运行。

展示程序主要完成,数据清洗,汇总求和以及展示地图的工作。这样前面的爬虫和后面的分析展示就连成一体了。

640?wx_fmt=png

旅游热点分析流程图

首先我们依旧要引入几个 Python 包,如下。其中 Geoopts 和 ChartType 都是用来展示地图用的。
640?wx_fmt=png

其次,我们需要装载 csv 文件。虽然我们下载了很多信息,但是对于我们最重要的其实是省市和热点信息。因为我们最后展示出来的就是,哪个城市是旅游的热点。

640?wx_fmt=png

城市,热度信息图

根据观察,要计算城市的热度,必须将城市信息分组以后求和,这个也是需要考虑的。

640?wx_fmt=png

根据城市信息对热度求和

将一些地图中无法识别的地点,以及一些没有热度值的脏数据过滤掉,就可以将生成的城市,热度列表传给展示函数了。

640?wx_fmt=png
最后,展示函数接受到列表参数,绘制热力图:

640?wx_fmt=png

结果分析


先看看哪些区域是大家比较喜欢的旅游目的地,如下图:

640?wx_fmt=png
2019 国庆旅游热力图

从图上可以看出北京,沿海地区(福建,广州),江浙地区,甘肃地区是国庆期间比较热门的景点。中部地区的武汉,由于军运会将至,也成为了旅游的热门城市。

640?wx_fmt=png
2019 国庆旅游热点图

再来看看,TOP 20 的旅游热点城市,如下图:

640?wx_fmt=png

TOP 20 的 5A 旅游景点:

640?wx_fmt=png

总结


640?wx_fmt=png

爬虫思维导图

在网络爬虫之前需要根据达到的目标进行构思,包括:选择网站,分析网站,数据抓取,数据展示。

在分析网站时,需要注意以下几点,包括全局分析,URL 分析,元素分析。

在爬虫编程之前,需要针对工具,IDE,Python 类库进行准备。爬虫编码分为,爬取旅游热点信息和旅游热点地图展示。

python爬虫之国庆旅游热点图.rar 根据 文章:https://blog.youkuaiyun.com/ajian6/article/details/101687225 爬取 去哪儿网 国庆旅游热门景点信息 并 绘制热点图 立即下载

相关推荐

python3爬取去哪儿酒店数据脚本

去哪儿酒店数据爬取,需要自己更换cookie,更换代理。输入要爬取的城市。 更换URL、data、headers同理可以爬取其他的数据~

python程序之祝贺国庆

祖国庆生

hackzqk的博客 4159

Python爬取去哪儿网文章及评论.py

Python爬取动态网站;Python爬取微信公众号文章以及评论源代码!

Python小实例之欢度国庆

国庆节将至,今天在课上老师交给我们一个任务,那就是用Python创作出一个国旗来个祖国庆生,让我们来看看吧。看看是不是很好看啊。

MaXiong2001的博客 2473

自举电容的工作原理-3句话总结

1、一道面试题 照例,先抛出来一道面试题:“Buck电路的SW引脚通常会放置一颗小电容,这颗电容有什么用?”。这个问题问得比较细,非常考验被面试者的硬件基本功。 2、似懂非懂的答案 有小伙伴可能不太清楚这颗电容的作用,回答不上来。也有小伙伴脱口而出:自举电容,用来做升压的。但后面好像说不出来具体逻辑。 没具体了解过,答不上来,也没啥可惜的。但是了解过一点,但又似懂非懂的这种,给出的答案只是轻轻点水或者千篇一律,那无疑是错过了一个加分项。 3、异步Buck的自举环路组成 既然是针对Buck电路讲自举电容,前面

ltqdxl的博客 3万+

使用海康机器人的SDK进行DWS开发时如何筛选不同类型的相机

使用MVIDCodeReader、MvCodeReaderSDK、MvVolMeasureSDK联合开发时,通常会做一些设备枚举列表,但是不同类型的设备需要枚举在不同的列表中,便于软件使用者配置参数,例如: 如何保证枚举出来的设备是可以选择的对应的设备。我们通常枚举出来的是这样的: 解决办法 在联合开发中,我们发现,只有MvVolMeasureSDK的枚举设备接口EnumStereoCamEx可以正确的只枚举出网络内的体积设备,其余的MVIDCodeReader、MvCodeReaderS

qq_29123967的博客 2732

基于Python实现的国庆节庆祝小程序

祖国母亲即将迎来75周年华诞,在这个特殊的日子里,我们可以用编程的方式来表达对祖国的祝福。本文将使用Python编写一个简单的国庆节庆祝小程序,通过一些编程技巧和设计为国庆节增添一些程序员的特色。

技术无疆 4724

从零到一:如何用YOLOv8和PyQt5打造一个高效的路面坑洞检测系统

本文详细介绍了如何利用YOLOv8和PyQt5开发一个高效的路面坑洞检测系统。从环境配置、数据采集标注到模型训练优化,再到PyQt5界面开发与系统集成,提供了完整的实战指南。该系统结合深度学习技术,显著提升了道路检测的准确性和效率,适用于各类道路维护场景。

weixin_29047919的博客 308

基于selenium爬取去哪儿酒店信息

去哪儿网站中,要爬取旅游的酒店信息,我们用通常的requests库进行爬取的时候发现,当我们要翻页的时候网址未出现变化,返回的网页源码信息始终只有第一页的内容,那么有没有一种方式可以使得能够翻页爬取呢?爬取酒店信息的重难点主要在于模拟的登录的过程,需要注意的坑是每次我们翻页的时候要下拉下滑网页,等待网页加载,加载完毕之后才能获取网页信息,再来就是网页信息的清洗,这里值得注意的是可能存在标签错位的情况,这里我们就要特殊情况,特殊处理。我们首先需要确定我们浏览器的版本,这里我使用的是谷歌浏览器。

m0_54454944的博客 2810

行人重识别技术(Re-ID)概述、研究现状以及相关数据集下载

ReID技术概述什么是ReID一般流程Re-ID特点研究现状难点数据集reid常用数据集以及下载链接评价指标实现思路研究方式基于表征学习基于度量学习基于局部特征全局特征切片姿态基于视频序列RQEN基于GANCamStyleDG-NetGAN总结对比未来方向建议文献 什么是ReID 行人重识别是指利用计算机视觉技术,判断在不同时间段、不同监控下出现的行人图像是否属于同一人员的技术。行人重识别是最近几年在视频分析领域下热门的研究领域,可以看做是人脸识别应用的拓展。现在大街上的监控较多,由于设备质量、成像光线、.

留缘的博客 1万+

手把手教你使用Segformer训练自己的数据

SegFormer 基于Swin transformer 修改

weixin_38353277的博客 2万+

国庆 8 亿人去哪儿浪?用 Python 偷偷告诉你

点击“开发者技术前线”,选择“星标????”在看|星标|留言, 真爱!“ 祖国 70 周年的华诞一天天临近,各行各业都在为祖国母亲庆祝生日。作为一个 IT 人,也想贡献一份绵...

开发者技术前线-DevolperFront 461

神领物流-day01-项目概述

公司从2019年开始业务快速扩张,网点数量从138家扩展至540家,车辆从170台增长到800台。同时,原有的系统非常简单,比如车辆的调度靠人工操作、所有的货物分拣依靠人员,核心订单数据手动录入,人效非常低。随着业务不断演进,技术的不断提升,原有运输管理系统已无法满足现有快速扩展下的业务需求,但针对现有系统评估后发现,系统升级成本远高于重新研发。因此,公司决定基于现有业务体系进行重新构建,打造一套新的TMS运输系统,直接更替原有系统。

心飞为你飞 2255

python爬取去哪儿网机票_国庆 8 亿人去哪儿浪?用 Python 偷偷告诉你

点击“开发者技术前线”,选择“星标?”在看|星标|留言, 真爱!“ 祖国 70 周年的华诞一天天临近,各行各业都在为祖国母亲庆祝生日。作为一个 IT 人,也想贡献一份绵薄之力。来自:51CTO栈 | 作者:崔皓 |图片来自 Pexels据文化和旅游部消息称,预计 2019 年国庆旅游人次有望达到近 8 亿。#国庆假期或有近 8 亿人次出游#这个话题还冲上了微博热搜榜。我仿佛已经看到了...

weixin_39942351的博客 221

第二次 PX4仿真环境搭建过程全记录

参考链接 https://blog.youkuaiyun.com/yanwumuxi/article/details/80097294 https://www.ncnynl.com/archives/201709/2013.html 一、安装依赖项 我们使用Debian / Ubuntu LTS 作为Linux的标准支持版本,但是也支持Cent OS 和 Arch Linux的发行版本。 权限设置 警告:永远...

移步换景的博客 2262

【AI for Medecine】吴恩达医学图像AI专项课程(诊断、预测、治疗)

近期需要简单了解AI4Science上的一些应用,看到吴恩达大佬的专项课程,于是开始来个“全面”的了解--医学人工智能(诊断、预测、治疗)。

图挖掘领域,新晋砖家 ☞ 未来可期,欢迎和静静一起学习交流吖 773
上一篇: 马斯克推出史上最强宇宙飞船!2个月内试飞,可载100人长期星际旅行,还发布火星城市构想...
下一篇: 看过这篇文章,再也不要说你是凭实力单身了
菜鸟学Python
博客等级 码龄9年 8063粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值