长沙欢迎你-去哪里玩
长沙,著名的"星城"、“娱乐之都”,湖南省省会,素有“屈贾之乡”、“山水洲城”之名。每年都有很多的游客到长沙旅游,不仅是因为美食多,比如:文和友小龙虾、臭豆腐、糖油粑粑,还因为长沙真的有很多可以游逛的美景。
本文将结合实际的数据来告诉你,如果你想去长沙旅游,你应该去哪里玩。湖南欢迎你,长沙欢迎你👏
系统环境
- Macos
- jupyter notebook
- python3.7.5
- Pyecharts 1.7.1(这个版本一定要一致)
数据获取
导入库
首先我们需要导入各种库,这些库的主要功能如下
- 爬虫请求发送及数据解析
- csv保存爬取到的数据
- Pandas处理爬取到的数据
- Jieba中文分词
- Pyecharts绘图专用库
1 | import pandas as pd |
爬取信息
先确定我们爬取的字段信息:
- 中文名:cn_title
- 英文名:en_title
- 排名:ranking
- 驴友百分比:lvyou
- 地点:location
- 简介:abstract
- 评论数:comment
- 攻略数:strategy
网页规律
首先看看网站URL的规律:
1 | https://travel.qunar.com/p-cs300022-changsha-jingdian-1-1 |
我们发现是通过最后的数字来更新URL地址的,因此实际爬虫中我们构造了一个URL地址来循环爬取:
1 | for i in range(1,165): |
单页源码获取
我们使用requests
模块来发送爬虫请求:
1 | url = "https://travel.qunar.com/p-cs300022-changsha-jingdian-1-1" |
源码规律
每页有10个景点(最后一页可能没有),再看看每个页面源码的规律:每个<li></li>
标签中代表一个景点
看看第一个景点(橘子洲)中8个字段信息所在的位置:
正则匹配单页数据
我们使用re模块通过正则表达式来解析需要爬取的字段
如果解析的HTML源码中含有双引号,那么
re.findall()
方法后面的字符串的最外层使用单引号
1、景点中文名
1 | # 1-景点中文名称 |
2、景点英文名
1 | # 2-景点英文名称 |
3、攻略数
4、点评数
1 | # 4-comment点评数量 |
5、地点
我们把去过()的驴友
作为关键词
1 | # 5-景点地点:去过+地点+的驴友..... |
6、排名
排名的提取稍微复杂些,因为有些景点没有排名信息,需要特殊处理,我们看看两种不同的源码
存在排名的情形:
不存在排名的情形:
我们以前10页为例,先提取ranking_sum后面的全部内容,如果有排名则再进一步处理,没有排名则显示为0:
1 | for i in range(1,5): |
7、驴友
1 | # 有多少的驴友也去过这个地方 |
8、景点简介
1 | # 8-景点简介 |
全网数据
下面是全网爬取的代码,包含几个内容:
- 请求网页获取源码
- 解析源码得到每个字段信息
- 保存到csv文件中
数据处理
读取数据
读取我们保存的数据:
我们关注的是长沙的相关景点,指定location=“长沙”,同时查看数据中字段的类型:
ranking处理
我们对景区排名进行处理,取出前20个景区,同时需要将排名为0的数据排除掉:
1 | # 如何修改某个字段的类型 |
从上面的表格数据可以得到初步结论:
- 网游眼中排名第一的是橘子洲🍊;排名第二的是岳麓山⛰。两个景点的确很出名
- 排名第三的黄兴路步行街🚶和第四的太平老街都是在长沙雨花区的五一广场附近
comment处理
评论comment处理,取出前20个评论最高的景点(降序):
1 | changsha2 = changsha[changsha["comment"] != 0].sort_values(by=["comment"],ascending=False)[:20] |
strategy处理
对攻略数量是和上面评论处理相同,取出前20个(降序):
1 | changsha3 = changsha[changsha["strategy"] != 0].sort_values(by=["strategy"],ascending=False)[:20] |
lvyou处理
我们爬取到的驴友数据是百分比,类型是字符串类型,我们现在去掉%符号,取出左边的数值,如果没有则用0代替:
1 | # 去掉%取出左边数据 |
abstract处理
简介是中文文字,我们接下来需要绘制词云图。我们先用jieba分词+去停用词的方法进行处理
1、简介全部转成一个大列表
1 | abstract_list = changsha["abstract"].tolist() |
2、使用jieba分词的效果
1 | for i in range(len(abstract_list)): |
3、分词结果放入一个列表中
1 | # 3-将分词的结果全部放入一个列表中,方便后续处理 |
4、分词之后使用去停用词
停用词表是我自己在网上收集和整理的:
- 先创建读取停用词表的数据的函数
- 加载停用词之后再和现有的数据对比判断
1 | # 创建停用词list |
5、统计单词个数
1 | dic = {} |
结果的部分截图:
6、将上面👆的字典数据转成列表嵌套元组的形式,方便后续绘图:
1 | tuple_list = [] |
绘图
- ranking:折线图
- comment:柱状图
- strategy:漏斗图
- lvyou:柱状图
- abstract:词云图
pyecharts配置项说明:https://zhuanlan.zhihu.com/p/117467519
1 | # 排名-折线图 |
看到效果中显示的图形,我们注意到两点:
- 左上角的
Save Config
按钮 - 整体图形靠左
- 图形是一个个上下排列
现在拖动图形和改变大小,排列成我们需要的形状和位置布局,点击Save Config
按钮,生成一个chart_config.json
的文件,我们运行如下的代码,便会将我们的图形固定下来。
1 | Page.save_resize_html("changsha.html", # 上面的HTML文件名称 |
结论
1、橘子洲你真的应该去👏
从上面的好几种图形中看出来,不管是排名,还是游客的评论数,亦或者游客的攻略数,橘子洲🍊都是排名第一,其附近的橘子洲烟火、橘子洲大桥等都是值得你去的第一个景点
2、五一广场你也不能错过
天心区的黄兴路步行街、太平老街、火宫殿、天心阁、南门口是一整片的繁华区,店铺和年轻人特别多,爱吃爱喝爱玩的你,最应该去那里
3、岳麓山散散步
从景区排名、网友的评论数、攻略数看出来,到长沙的朋友也特别爱去岳麓山。岳麓山、岳麓书院、爱晚亭是连在一起的,连湖南大学也在山脚下,也是一个很不错的景点。
4、逛逛博物馆和遗址
如果你喜欢历史,喜欢逛博物馆,那么你可不能错过:湖南省博物馆、马王堆汉墓遗址、长沙简牍博物馆,尤其是著名的马王堆汉墓遗址🐎。
湖南长沙欢迎你😊