社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python爬取全国火锅店,并利用地图可视化展示

Crossin的编程教室 • 4 年前 • 756 次点击  

大家好,欢迎来到 Crossin的编程教室 !


今天给大家分享一个数据可视化案例:如何获取全国不同城市火锅店数量情况,并将这些数据进行可视化展示,以更加直观的方式去浏览全国不同省份、不同城市的火锅店分布情况。


本文数据来自于某度地图,通过python技术知识去获取数据并进行可视化。


注:本文内容仅作为编程技术学习讨论,相关代码和数据不可用于商业用途,否则后果自负。


1

网页分析


首先先看一下数据源,在某度地图里面按照下方操作,就可以请求到全国的火锅店情况(从下图来看没有显示出来,但是通过浏览器工具的Network功能,可以看到数据。具体操作可参考:爬虫必备工具,掌握它就解决了一半的问题)



再network中,找到下面这个数据包



打开之后可以看到json数据



2

获取数据


对网页分析好之后,接下来可以借助Python技术进行获取数据,并保存到excel中。

导入相关库

import jsonimport requestsimport openpyxl

请求数据

下面开始编写请求数据代码(请求时记得带上headers)


###请求头headers = {        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",        'Referer':'https://map.baidu.com/@12949550.923158279,3712445.9716704674,6.28z',        "Cookie":";"你的cookie",}##请求链接url = "https://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&da_src=searchBox.button&wd=%E7%81%AB%E9%94%85%E5%BA%97&c=1&src=0&wd2=&pn=0&sug=0&l=6&b=(10637065.476146251,2368134.592189369;12772445.910805061,5056757.351151566)&from=webmap&biz_forward={%22scaler%22:1,%22styles%22:%22pl%22}&sug_forward=&auth=NTSwAZUMzIaTTdWD4WAv0731cWF3MQEauxLxREHzERRtykiOxAXXw1GgvPUDZYOYIZuVt1cv3uVtGccZcuVtPWv3GuztQZ3wWvUvhgMZSguxzBEHLNRTVtcEWe1GD8zv7ucvY1SGpuxVthgW1aDeuxtf0wd0vyMySFIAFM7ueh33uTtAffbDF&seckey=c6d9c7e05d7e627c56ed46fab5d7c5c792064779599d5e12b955a6f18a1204375d1588206c94d22e4bdd1ade0ad06e78c21917e24c6223b96bc51b75ca38651a1b203a0609f126163c5e82fd0549a068e537303424837ab798acfc9088e5d76a66451c20ebd9599b41c9b4f1371850d20fa442ad464712f54c912422f4fa20b3052f8bb810f30d41c7c0e55af68f9d9d973537f03d0aa0a1d1617d78cae29b49c64c2d2dc3f44cf0f8799234b124a7a2dec18bfa011e097e31a508eae37b8603f97df8f935f04b3652f190eac52d04816f302a582c53971e515ff2e0e2b4cc30446e0bee48d51c4be8b6fe4185589ed9&device_ratio=1&tn=B_NORMAL_MAP&nn=0&u_loc=12677548,2604239&ie=utf-8&t=1618452491622"###响应数据response = requests.get(url,headers=headers).json()


这里的cookie可以在浏览器network中复制即可。



通过返回的json数据可知道,我们的目标数据在more_city中,里面是列表数据是省份(provice是省份名称,num是火锅店数量),紧接着每一个省份里都有city(列表),里面是对应着省份的城市(name是城市名称,num是对应城市火锅店数量)


response = response['more_city']for i in response:    city = i['city']    print(i['province'])    print(i['num'])    for j in city:        print(j['name'])        print(j['num'])


保存到excel

省份和城市分别保存到两个不同的excel中


outwb_p = openpyxl.Workbook()outws_p = outwb_p.create_sheet(index=0)outws_p.cell(row=1, column=1, value="省份")outws_p.cell(row=1, column=2, value="数量")
outwb_c = openpyxl.Workbook()outws_c = outwb_c.create_sheet(index=0)outws_c.cell(row=1, column=1, value="城市")outws_c.cell(row=1, column=2, value="数量")
#####################在循环中写入数据##################
### 保存全国省份火锅数量-李运辰”outwb_p.save("全国省份火锅数量-李运辰.xls") # 保存### 保存全国城市火锅数量-李运辰”outwb_c.save("全国城市火锅数量-李运辰.xls") # 保存


                   


3

数据可视化

1.全国火锅店数量分布

datafile = u'全国省份火锅数量-李运辰.xls'data = pd.read_excel(datafile)attr = data['省份'].tolist()value = data['数量'].tolist()name = []for i in attr:    if "省" in i:        name.append(i.replace("省",""))    else:        name.append(i)from pyecharts import options as optsfrom pyecharts.charts import Mapfrom pyecharts.faker import Fakerc = (    Map()        .add("数量", [list(z) for z in zip(name, value)], "china")        .set_global_opts(title_opts=opts.TitleOpts(title="全国火锅店数量分布情况"))        .render("全国火锅店数量分布情况.html"))



还可以这样画


datafile = u'全国省份火锅数量-李运辰.xls'df = pd.read_excel(datafile)province_distribution = df[['省份', '数量']].values.tolist()geo = Geo()geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))geo.add_schema(maptype="china")geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=110000))# 加入数据geo.add('全国火锅店数量分布情况图2', province_distribution, type_=ChartType.EFFECT_SCATTER)geo.render("全国火锅店数量分布情况图2.html")



2.四川火锅店数量分布

为了绘制城市的分布图,选择了四川省为例进行绘制(如果要绘制全国的所有城市,那样出来的图密密麻麻,不美观)


datafile = u'全国城市火锅数量-李运辰.xls'data = pd.read_excel(datafile)city = data['城市'].tolist()values2 = data['数量'].tolist()
###四川name = []value = []flag = 0for i in range(0,len(city)): if city[i] =="绵阳市": flag = 1 if flag: name.append(city[i]) value.append(int(values2[i]))
if city[i] =="甘孜藏族自治州": name.append(city[i]) value.append(int(values2[i])) breakc = ( Map() .add("四川火锅店数量分布", [list(z) for z in zip(name, value)], "四川") .set_global_opts( title_opts=opts.TitleOpts(title="四川火锅店数量分布"), visualmap_opts=opts.VisualMapOpts() ) .render("四川火锅店数量分布.html"))




4

小结


以上就是一个简单的爬虫+可视化案例。


如果文章对你有帮助,欢迎转发/点赞/收藏~


获取文中相关代码及数据,请在公众号后台回复关键字 火锅

作者:李运辰

来源:Python研究者


_往期文章推荐_

Python分析|你知道一个城市有多少家麦当劳吗?




如需了解付费精品课程及教学答疑服务
请在Crossin的编程教室内回复: 666

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/123109