五一去长沙吃喝玩乐

前几天发表过一篇文章厦门不止鼓浪屿,得到了一些朋友的肯定,让我再写下其他城市。这两天又获取到了两份关于长沙的数据:长沙景点和长沙美食,之后进行了分析,如果有朋友想去长沙或者周边城市玩,要仔细看看喔。

导入库

import pandas as pd
import re
import csv
import json
import requests
import random# 显示所有列
# pd.set_option('display.max_columns', None)# 显示所有行
# pd.set_option('display.max_rows', None)# 设置value的显示长度为100,默认为50
# pd.set_option('max_colwidth',100)# 绘图相关
import jieba
import matplotlib.pyplot as plt
from pyecharts.globals import CurrentConfig, OnlineHostType
from pyecharts import options as opts  # 配置项
from pyecharts.charts import Bar, Pie, Line, HeatMap, Funnel, WordCloud, Grid, Page  # 各个图形的类
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType,SymbolTypeimport plotly.express as px
import plotly.graph_objects as go

长沙景点

景点分析效果

首先看见具体的分析结果:

数据获取

长沙景点的数据获取方法和之前那篇关于厦门的文章是一样的,只是重新跑了一遍代码,具体过程不再阐述,感兴趣的朋友可以看之前的文章,爬取的字段:

  • 中文名
  • 英文名
  • 攻略数
  • 评价数
  • 位置
  • 排名
  • 驴友占比
  • 简介

具体的源代码如下:

最终数据有1152条,数据中绝大部分是长沙的景点数据,也有少量周边城市,比如:宁乡、浏阳等的数据,整体的数据前5行如下:

下面重点介绍数据分析的过程

整体情况

首先看看整体的数据情况:

fig = px.scatter(changsha[:10],  # 前10个x="strategy",  # 攻略数y="comment",   # 评论数color="comment",  # 颜色选取size="comment",  # 散点大小hover_name="cn_title",text="cn_title"  # 显示文字)fig.update_traces(textposition='top center')  # 文本顶部居中显示fig.show()

很显然:橘子洲、岳麓山、岳麓书院、太平老街排名靠前

排名靠前景点

看看排名靠前的景点是哪些?

# 根据ranking排序取出前20名数据,排除ranking=0的数据,再取出前10数据changsha1 = changsha[changsha["ranking"] != 0].sort_values(by=["ranking"])[:20].reset_index(drop=True)
changsha1.head(10)

通过排名我们发现:橘子洲(烟火、大桥、天心阁)、岳麓山(书院)、黄兴路步行街、马王堆汉墓遗址、湖南省博物馆,整体排名很靠前,深受游客们欢迎,具体看看排名前20的景点:

评论火爆景点

很多游客到了一个景点喜欢写评论,看下哪些景点获得大量的评论:

changsha2 = changsha[changsha["comment"] != 0].sort_values(by=["comment"],ascending=False)[:10]# 绘图
fig = px.scatter(changsha2,x="cn_title",y="comment",size="comment",color="comment",text="cn_title"
)fig.update_traces(textposition="top center")fig.show()

攻略在手,旅游不愁

出门旅游之前最好还是做一份旅游攻略,看看提供攻略最多的前10景点是哪些:

如果我们考虑前20个景点的攻略数:

驴友占比

我们爬取到的驴友数据是百分比,类型是字符串类型,我们现在去掉%符号,取出左边的数值,如果没有则用0代替,方便最终画图,具体操作如下:

# 去掉%取出左边数据
changsha["lvyou_number"] = changsha["lvyou"].apply(lambda x:x.split("%")[0])
changsha["lvyou_number"] = changsha["lvyou_number"].astype(int)
changsha.head()

取出排名前10的驴友占比景点:

景点介绍

获取到的abstract字段是用来描述景点的基本信息,可以用来制作词云图,具体处理过程如下:

abstract_list = changsha["abstract"].tolist()# 1、分词
jieba_name = []
for i in range(len(abstract_list)):# seg_list只是一个generator生成器:<class 'generator'>seg_list = jieba.cut(str(abstract_list[i]).strip(), cut_all=False)  # 对list(seg_list)中的每个元素进行追加for each in list(seg_list):   jieba_name.append(each)# 2、去停用词
# 创建停用词list
def stopwordslist(filepath):stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]return stopwords# 传入路径,加载去停用词
stopwords = stopwordslist('/Users/peter/Desktop//nlp_stopwords.txt')  stopword_list = []
for word in jieba_name:  # jieba_name中的word不在停用词表中,且不是\t制表符if word not in stopwords:if word != "\t" and word != " " and word != "nan":stopword_list.append(word)# 3、统计单词出现个数
dic = {}
number = 0for each in stopword_list:if each in dic.keys():number += 1   dic[each] = numberelse:dic[each] = 1 # 不存在则结果为1# 4、字典转成json数据,绘制词云图需要
tuple_list = []
for k,v in dic.items():tuple_list.append(tuple([k,v]))tuple_list[:20]

长沙美食

第二部分介绍的是长沙(长沙附近部分城市)的美食,接下来从3个方面介绍:

  • 字段获取
  • 数据保存及处理
  • 美食数据分析

发送请求

url = "https://travel.qunar.com/p-cs300022-changsha-meishi?page=1"headers = {"user-agent": "个人请求头"}response = requests.get(url=url,headers=headers)
result = response.content.decode()

字段获取

  • 名称cn_title
  • 评分socre
  • 均价person_avg
  • 地址address
  • 推荐菜recommand
  • 评价comment

1、源码结构

网页显示每页有10个景点(最后页未必是10个),总共200页的数据,每个景点的信息包括在一个<li></li>标签对中,我们只需要从标签中获取到相应的信息即可

2、名称和评分两个字段的获取相对简单,直接通过正则表达式来获取,关键字定位需要准确(以后会详细详解正则表达式的使用)

# 中文名
cn_title = re.findall('cn_tit">(.*?)</span>.*?countbox',result,re.S)

# 得分:没有得分用--表示
score = re.findall('cur_score">(.*?)</span>.*?total_score',result,re.S)

3、关于剩下4个字段的获取,相对复杂。因为他们并不是在每个店的信息中存在,有的,但是他们有一个共同点:全部是隐藏一个<div></div>标签对中,而且每个字段都有自己的关键词

具体处理方法:先大后小

1、先整体:提取sublistbox下面的全部信息

2、从步骤1的信息进行判断,获取4个单独字段

# 均价
person_avg = []for i in range(len(sublistbox)):try:if "均" in sublistbox[i]:  # 如果均价存在person_avg.append(re.findall('&yen; (.*?)</dd></dl>',sublistbox[i],re.S)   [0])   # 将解析出来的第一个字段放入列表中else:  # 否则,不存在的话,添加0person_avg.append(0)continue   # 遇到报错继续往下执行except:person_avg.append(0)

剩下3个字段处理类似:

address = []for i in range(len(sublistbox)):try:if "址" in sublistbox[i]:  # 关键词address.append(re.findall('址.*?des_line">(.*?)</dd></dl>',sublistbox[i],re.S)[0])else:address.append("无")continueexcept:address.append("无")
recommand = []for i in range(len(sublistbox)):try:if "推荐菜" in sublistbox[i]:recommand.append(re.findall('推荐菜.*?des_line">(.*?)</dd></dl>',sublistbox[i],re.S)[0])else:recommand.append("无")continueexcept:recommand.append("无")
comment = []for i in range(len(sublistbox)):try:if "desbox" in sublistbox[i]:   # 关键词comment.append(re.findall('.*?txt">(.*?)<span class="img_doublequote img_r">',sublistbox[i],re.S)[0])else:comment.append("无")continueexcept:comment.append("无")

4、上面是获取单页数据的解析过程,下面讲解如何获取200页的字段数据:

# 中文名:得分字段类似
cn_title_list = []for i in range(1,201):url = "https://travel.qunar.com/p-cs300022-changsha-meishi?page={}".format(i)headers = {"user-agent": "请求头"}response = requests.get(url=url,headers=headers)result = response.content.decode()cn_title = re.findall('cn_tit">(.*?)</span>.*?countbox',result,re.S)for each in cn_title:cn_title_list.append(each)cn_title_list
#  均价字段:地址、推荐菜、评价类似
# 某个字段不存在,用0或者无代替
person_avg_list = []for i in range(1,201):url = "https://travel.qunar.com/p-cs300022-changsha-meishi?page={}".format(i)headers = {"user-agent": ""}response = requests.get(url=url,headers=headers)result = response.content.decode()# 1、先整体提取sublistbox = re.findall('sublistbox">(.*?)</div>', result, re.S)# 2、再局部提取person_avg = []for i in range(len(sublistbox)):try:if "均" in sublistbox[i]:person_avg.append(re.findall('&yen; (.*?)</dd></dl>',sublistbox[i],re.S)[0])else:person_avg.append(0)continueexcept:person_avg.append(0)for each in person_avg:person_avg_list.append(each)# 地址
address_list = []for i in range(1,201):url = "https://travel.qunar.com/p-cs300022-changsha-meishi?page={}".format(i)headers = {"user-agent": "请求头"}response = requests.get(url=url,headers=headers)result = response.content.decode()# 1、先整体提取sublistbox = re.findall('sublistbox">(.*?)</div>', result, re.S)# 2、再局部提取address = []for i in range(len(sublistbox)):try:if "址" in sublistbox[i]:address.append(re.findall('址.*?des_line">(.*?)</dd></dl>',sublistbox[i],re.S)[0])else:address.append("无")continueexcept:address.append("无")for each in address:address_list.append(each)address_list[:20]

获取全网数据

5、提取到每个字段后生成整体数据,并保存:

# 1、生成数据df = pd.DataFrame({"中文名": cn_title_list,"得分": score_list,"均价": person_avg_list,"地址": address_list,"推荐菜": recommand_list,"评价": comment_list
})
# 2、保存数据
# df.to_csv("长沙美食.csv",index=False,encoding='utf_8_sig')  # 防止乱码

美食数据分析

前期处理

在进行数据分析之前,需要进行前期的处理:

df["得分"] = df["得分"].apply(lambda x: x.replace("--","0"))  # 将得分中的--替换成0

改变两字字段的数据类型:

长沙到底有几家文和友?

1、文和友是长沙的知名老店,那获取到的数据中有几家和文和友相关的店?

数据显示:20家

看看前5家:

2、哪家文和友得分最高?

我们看看前5名:

fig = px.scatter(wenheyou_score[:5],x="中文名",y="得分",color="得分",size="得分",text="地址"
)fig.update_traces(textposition="top center")
fig.show()

可以看到:府中路的这家店是评分最高的,网友给的评价是:

虾肉很新鲜,口感嫩滑,入味极佳,个人觉得不是很辣,但是如果对于吃辣程度一般的人来说,绝对足够了。

臭豆腐香不香?

1、看看数据中有臭豆腐店

数据显示有19家,我们看看前5家店

2、臭豆腐的价格如何?

爬虫数据分析-长沙美食美景相关推荐

  1. Python采集去哪儿旅游攻略(爬虫+数据分析),快过年了,这不得全家一起出去玩一次

    本次目的: Python采集去哪儿旅游攻略(爬虫+数据分析) 内容介绍: 2021有哪些好玩的地方?今天用python分析适合年轻人的旅游攻略 (数据分析) 知识点: requests 发送网络请求 ...

  2. 城市生活知识图谱 ①百度贴吧爬虫源码,长沙吧,长沙美食吧

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.数据格式 二.网站分析 三.源码 总结 前言 本文发布时间为2022年1月7日,超过一定日期,代码可能无法运行. ...

  3. 对爬虫数据分析的同学不要错过啦 数据分析数据可视化: Matplotlib

    Matplotlib 是 Python 中最基本的可视化工具,官网里 (( https://matplotlib.org/) 有无数好资料,但这不是重点,本文肯定和市面上的所有讲解都不一样. 和 Nu ...

  4. Python爬虫+数据分析+数据可视化(分析《雪中悍刀行》弹幕)

    Python爬虫+数据分析+数据可视化(分析<雪中悍刀行>弹幕) 哔哔一下 爬虫部分 代码部分 效果展示 数据可视化 代码展示 效果展示 视频讲解 福利环节 哔哔一下 雪中悍刀行兄弟们都看 ...

  5. bilibili爬虫+数据分析

    Python爬虫+数据分析+数据可视化实战 Python爬虫+数据分析+数据可视化实战 1. 背景介绍 2. 需求目标 3. 基于urllib的bangumi和bilibili一键爬虫脚本的编写 3. ...

  6. 爬虫数据分析-美食网站最爱甜点top10

    抓取数据: 关于甜点这块抓取了2000个,有甜点名称.评分.多少人喜欢和食材. 获取到的大家做喜欢的top10: 其实就是这些鬼: 小四卷-风靡美食群的美味蛋糕卷 超完美味道超正的蛋挞配方,比KFC的 ...

  7. 爬取了大众点评和去哪儿网上4312家长沙美食,看看什么值得吃?|凹凸数读

    原文链接:五一去长沙,到了吃点啥?|数据会说话Vol.01-凹凸数读 爬虫和源数据在文末! 我们在去哪儿网爬取了五一广场周围5公里之内2000家美食的经纬度地理坐标,利用echarts与百度地图API ...

  8. python简直旅游好帮手:【爬虫+数据分析】这不玩个遍?

    嗨害大家好鸭~我是小熊猫❤ 就快放假啦~ 大概还有十几个小时的样子吧 不知道大家的假期有什么样的安排呢? 不过大家一定要保住自己的健康码啊!!! 趁现在,先来用python做一个旅游攻略 知识点: r ...

  9. 爬虫+数据分析,制作一个世界疫情人数增长动态柱状竞赛图

    世界疫情的数据很多网站都有,这里我还是使用手机网易的疫情数据接口. 首先,切换ua,换成手机模式.百度搜索"网易 疫情", 第一个就是. 打开这个网址,点开开发者工具,刷新一下.就 ...

最新文章

  1. Google VC投资SDN初创公司Plexxi
  2. 为何终端防护对ICS如此重要
  3. CodeAnyWhere
  4. php 查询数据库返回json数据
  5. $_FILE函数总结
  6. Node+Express+Vue2.x+Mongodb结合muse-ui、less、rem等实现简易博客
  7. yum清缓存_linux yum清除var目录下缓存的方法
  8. java做flv直播服务器,EasyDSS流媒体服务器软件(支持RTMP/HLS/HTTP-FLV/视频点播/视频直播)-正式环境安装部署攻略...
  9. Flutter应用进行自动化测试
  10. html打印日志_Graylog(四)使用Log4j2发送日志到Graylog
  11. 排查Linux机器是否已经被入侵
  12. android 小米读写权限,Android 小米手机的权限问题
  13. 解决小米wifi在windows10无法创建问题
  14. ESP32驱动AD7705
  15. windows11(win10大部分通用)系统C盘清理 | 深度优化
  16. 美妆类短视频如何定位?可以考虑三个方向,吸粉引流指日可待
  17. 十分钟玩转3D绘图:WxGL完全手册(第二版)
  18. 2 年前端面试心路历程总结(字节跳动、YY、虎牙、BIGO)
  19. Raid磁盘阵列(详解,操作演示)
  20. 华为matepad11无法连接mpencil2

热门文章

  1. 【学术】基金申请体会:写好本子是年轻人的最佳出路(转贴)
  2. 由低分辨率栅格插值为高分辨率栅格的ArcGIS处理过程
  3. Java面向对象编程面试题:银行业务调度系统
  4. 使用Arduino制作自动车测速
  5. js创建svg元素并插入到html中使用createElementNS
  6. 批处理命令:一键安装JDK/一键安装JRE和自动配置Java环境变量
  7. uniApp 新闻详情页语音播报,百度语音合成app端、H5端语音播报实例
  8. Java项目:JSP的电影院售票系统(含论文、任务书、中期检查表)
  9. SCI论文如何写--斯坦福大学公开课-Writing in the Sciences
  10. 数字金额转换为大写金额python_python 数字转换为大写