厦门真的不止鼓浪屿
那就先来一张鼓浪屿的照片,笔者曾经带着朋友去鼓浪屿的日光岩
(鼓浪屿最高峰)顶上拍摄的一张全景图。顶上的游客特别多,鼓浪屿、厦门标志性建筑世茂双子塔、厦门湾尽收眼底。的确是很美的😃
数据来源
本文中使用的数据是从一个网站上进行爬取的,具体过程详细解说。
爬取字段
总共爬取了6个字段,它们分别是:
- 中文名称cn_title
- 英文名称en_title
- 攻略strategy
- 点评comment
- 排名ranking
- 景点简介abstract
网页规律
1、进入网站:https://travel.qunar.com/p-cs299782-xiamen-jingdian-1-1,我们发现每页最多有10个景点,总共126页:
网页规律可以构造为:
1 | for i in range(1,127): |
2、我们看看6个字段信息在源码中位置,右键单击,选择“检查”,在审查元素elements中找到每页的10个景点,其中每个<li></li>
对代表一个景点。
3、看下每个字段的位置
通过下面的3幅图我们定位到了每个字段所在的位置。只有定位到了字段的位置,我们才能够进行解析出来。
下面我们将每个字段解析出来
导入相应库
爬取字段首先需要导入各种库,这些库主要的功能包含:
- 发送网络请求requests
- 正则解析数据re模块
- json包处理Python字典类型数据
- csv用于保存爬取到的数据
- Pandas、numpy处理爬取的数据
- plotly_express和pyecharts的绘图
1 | import pandas as pd |
第一页数据请求
我们先看看第一页数据的请求,看下具体的源码
部分的网页数据如下:
匹配字段
下面是通过re模块的findall()
使用正则表达式来匹配每个字段:
1、景点中文名称
有时候我们需要检查下每页的个数是否是10个,所以打印出来了长度,刚好是10个
2、景点英文名称
3、攻略数量
4、点评数量
5、景点排名
景点排名比较特殊,自己在爬取数据的时候发现有些景点是没有排名的,比如第16页的景点中,很多没有排名,需要特殊出来下。
在上面的代码中,如果景点的排名不存在,则用0代替:
6、景点简介
全网爬取
下面是爬取整个网站的源码,包含:
- 网页URL构造
- 发送请求,获取源码
- 字段解析过程,特殊情况处理
- 保存文件
数据处理
首先我们通过pandas来读取我们获取到的数据:
1 | df = pd.read_csv("厦门景点.csv") |
查看一下数据的长度和字段类型,以及是否有缺失值:
- 可以发现3个字段是字符串类型:object
- 另外3个字段是int64的类型
1 | df.isnull().sum() # 查看缺失值 |
中文名称cn_title
首先我们看看景点的名称(分析中文名称)。厦门是一个花园城市,整个岛上有很多的公园,我们从数据中看看厦门有多少公园:
str.contains()
:字符串包含函数reset_index()
:pandas中的索引重排
1 | # 1-多少个公园 |
结论:数据显示厦门岛内外总共有107个公园
我们将公园按照ranking字段进行排序,再看看具体是哪些公园比较受欢迎:
1 | new_park = park[park["ranking"] != 0].sort_values(by=["ranking"]).reset_index(drop=True) |
从数据中看出来,排名前三的是:铁路文化公园、中山公园、五缘湾湿地公园
1、铁路文化公园:笔者去过一次,在金榜公园文凭路附近,是鹰厦(江西鹰潭到厦门)铁路的延伸线,还有陈旧的铁轨
2、中山公园:很多地方应该都有中山公园,纪念孙中山先生,在这里一般会举行很多的活动
3、五缘湾湿地公园:一提到五缘湾,就让人想到厦门的土豪们。五缘湾可以说是厦门的土豪区
还有白鹭洲公园,忠仑公园,岛外的天竺山森林公园等都是值得一去的地方。接下来我们看看厦门有哪些著名的街道:
1 | # 2-著名街道 |
数据中共有37条,我们取出前10条数据
中山路步行街真的是太火了:各种当地闽南小吃、奶茶、台湾特产,厦门标志性建筑-骑楼。每到节假日都是堵车,人山人海。
顶澳仔猫街也有很多人去。在厦门大学南门不远处,笔者去过几次。里面有个卖猫的小店,超级火🔥最后我们看看和大学相关的景点:
可以看到基本上厦门和学校相关的17个景点被3所高校承包了:
- 厦门大学:中国最美的大学
- 集美大学
- 华侨大学
厦门大学以前游客是可以随意进出的。最近几年开始限制人数,而且还需要预约才能进校,所以想去厦门大学的小伙伴要提前预约喔
但是如果你有亲戚或者朋友在里面读书,听说可以带进去的喔😃偷偷告诉你。放一张厦门上弦场的照片,笔者曾经拍摄的。
景点排名ranking
我们直接通过景点的排名ranking来看看哪些景区受欢迎:
1 | # 排除ranking=0的数据;排名升序排列; |
排名第一的果然是鼓浪屿😭。贝壳🐚梦幻世界、厦门海底世界、厦门大德记浴场、日光岩等都是鼓浪屿上的景点。所以鼓浪屿真的是非常火
其次就是厦门大学和旁边的南普陀寺,也是游客喜欢光顾的景点。前几年,厦门修建一个新的标志性建筑:世贸双子塔,也有很多游客去那边。
攻略数strategy
很多游客到了景点之后喜欢写一些旅游攻略供他人参考,我们看看热门景点的攻略数:
1 | px.scatter(df, # 绘图数据 |
结论:数据显示厦门大学是游客最喜欢写攻略的景点,其次是南普陀寺和中山路步行街。
点评数comment
我们再来看看游客们对景点的点评数;降序排列之后取出前20个景点,并显示前10条数据:
1 | comment = df[df["comment"] != 0].sort_values(by=["comment"],ascending=False)[:20].reset_index(drop=True) |
1 | px.scatter(comment, # 数据框 |
根据评论数comment和排名ranking,我们画出多图组合:
1 | fig = px.scatter(comment, # 数据框 |
排名第一的果然还是鼓浪屿😭厦门大学、南普陀寺、中山路步行街等紧随其后。
简介abstract
最后我们分析下网站上对景点的简介。在这里我们使用的WordCloud来绘制词云图。首先将简介中的空值进行填充。
1 | abstract = df.fillna(value="") # 缺失值填充 |
接下来我们使用jieba分词之后,再将每个分词追加到一个大的列表中:
1 | jieba_list = [] |
第一次:使用Wordcloud直接绘图
1 | from wordcloud import WordCloud |
从词云图中看出来,简介中:厦门和鼓浪屿是非常突出的。当然也有很多的无效词语,比如:位于、这里等,接下来我们使用去停用次表进行处理,停用词表是网上收集的:
1 | ### 使用去停用词再画一次:停用词表是自己收集的 |
使用停用词表之后发现逗号等标点去掉了,很多没有价值的词语也被取消。接下来我们使用下面这张美女的图形作为背景图来绘制词云图:
1 | from os import path |
最终绘制出来的图形如下显示:
总结
本文通过从网上爬取的一份数据,对厦门的相关景点进行了分析,看看大家到厦门都喜欢去哪里:
- 鼓浪屿真的太火了,基本上游客是必去的
- 厦门大学片区的景点:厦门大学思明校区(芙蓉湖、芙蓉隧道、颂恩楼等)、旁边的南普陀寺、寺庙上面的五老峰
- 如果你喜欢大海,喜欢骑行,去这里:厦大白城沙滩、演武大桥、环岛路、胡里山炮台、椰风寨
- 如果你是个美食爱好者,你应该去:中山路步行街、曾厝垵、台湾小吃街
- 如果你是个文艺小青年,沙坡尾艺术西区你不能错过
最后一句:厦门欢迎你!😃