行业分类: 餐饮 教育 酒店 休闲 服务 家居 家纺 服装 酒水饮品 零售 医药 建材 环保 珠宝 美容 母婴 汽车 金融
当前位置:首页  加盟资讯  餐饮资讯  项目动态正文

今天肚子饿了,那么Python爬取北京美团汉堡外卖数据

发布时间:2022-05-27 15:29:37 发布人:

前言@Author:By Runsen今天肚子饿了,我突然想点一个外卖,最近迷上了香辣鸡腿堡,打开美团外卖竟然发现周围没有店家, 有的店家离我非常远,气得我不行了,送过来要2个小时,说好的美团外

前言

@Author:By Runsen

今天肚子饿了,我突然想点一个外卖,最近迷上了香辣鸡腿堡,打开美团外卖竟然发现周围没有店家, 有的店家离我非常远,气得我不行了,送过来要2个小时,说好的美团外卖,送啥都快。

于是,我不得不跑去支付宝下的饿了么去下单,发现半小时就可以给我送到了,神速。吃上香辣鸡腿堡,顺便点了薯条和可乐,真香!

突然间,做了一个小梦,梦到了负责北京的美团老板私信我,说北京各区卖汉堡的店家分布,是不是有的区竟然买不到汉堡,在哪里,我得赶紧找店家。确实如此,有的偏远的地方还真的没有叫外汉堡的可怜。

那么,今天教大家爬取美团外卖并数据分析展示,效果如下图所示。

爬虫

于是,我来到了美团,点击了北京的地方,搜一些汉堡。

爬取的网址是https://bj.meituan.com/s/%E6%B1%89%E5%A0%A1/

瞬间有多少卖汉堡的店家出来, 比如,肯德基,汉堡王,华莱士·炸鸡汉堡,麦堡王炸鸡汉堡。

专业的我,看了下页面,点击了换页,url没有变化,八成就是一个ajax发起了。

二话不话的我,赶紧去找这个JSON数据源,费劲心思,终于找到了。

我突然发现,我怎么这么蠢,搜一搜不就可以了吗?于是,找了一个店家的地方叫:朝阳区三里屯路三里屯北街81号,我也不知道哪里,一下子就找到数据了。

数据找到了,就赶紧把发送了请求找出来,简单的发现了请求就是这个https://apimobile.meituan.com/group/v4/poi/pcsearch/1?uuid=67048e20775440d296e7.1587173677.1.0.0&userid=1493835176&limit=32&offset=32&cateId=-1&q=%E6%B1%89%E5%A0%A1

找了几次发现offset参数是变的,是32*页数变化的。哈哈,原来如此,菜鸟的我赶紧撸了下代码,运行结果老是JSONDecodeError: Expecting value: line 1 column 1,这是因为没有返回json数据。

菜鸟的我情不自禁的加上了User-Agent,Cookie,Referer。反正在请求url上的参数全部加上,终于,爬取成功了,并保存了csv格式的数据。

这里,我发现美团外卖的Cookie具有时效式,害得我差点去破解Cookie的加密参数和规则。成功爬取300多数据的店家,就赶紧跑路。

数据分析

下面,就是我爬取的300多条在北京卖汉堡的店铺,好像也就300多家。

竟然发现了有的店家人均消费是0元的,我说你不做汉堡挣钱,挂一个空店铺干嘛呢?

于是,我除去了人均消费等于0的6间店铺,决定把北京各区卖汉堡的店家通过可视化的方式展现出来。

果然在政治中心的海淀区,朝阳区的卖汉堡的店家真的多,北京偏远的地区,如门头沟区,延庆区,怀柔区卖汉堡真的少。老板,你赶紧去在门头沟区,延庆区,怀柔区大力招商。

把北京各区卖汉堡的店家的人均评分人均消费,也通过可视化的方式展现出来。

人均评分

人均消费

终于搞定了,发现北京叫一个汉堡就是30多块钱,和我这里比差不多。

爬虫代码

''' @Author: Runsen @微信公众号: 润森笔记 @博客: https://blog.csdn.net/weixin_44510615 @Date: 2020/4/17 ''' ''' JSONDecodeError: Expecting value: line 1 column 1 cookie会失效 ''' import json import csv import requests def get_data(page): with open('meita.csv', 'a',newline='') as f: ff = csv.writer(f) ff.writerow(["店铺名", "地址", "人均评分","人均消费"]) for i in range(int(page)): url = 'https://apimobile.meituan.com/group/v4/poi/pcsearch/1?uuid=67048e20775440d296e7.1587173677.1.0.0&userid=1493835176&limit=32&offset={}&cateId=-1&q=%E6%B1%89%E5%A0%A1'.format(32*i) headers = { "Cookie": "_lxsdk_cuid=1718267fbfec8-0d625514f0d01e-67e1b3f-1fa400-1718267fbfec8; _hc.v=14398722-3b0d-1aff-76e8-8d7ec87dbf6d.1587115174; t_lxid=171876fb4da14-09ef3c1405fc9e-67e1b3f-1fa400-171876fb4dbc1-tid; mtcdn=K; uuid=67048e20775440d296e7.1587173677.1.0.0; ci=1; rvct=1%2C91; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; lt=4V8SBVb4xJAHZl-U_euIyTMbozoAAAAAdwoAAE2M1UJQUwU7qqZtZ6xy7zLa5p6hqvDETx32HoG_UWMfEVE4F3pqU5cIQwKcwEFdig; u=1493835176; n=tIJ111616537; token2=4V8SBVb4xJAHZl-U_euIyTMbozoAAAAAdwoAAE2M1UJQUwU7qqZtZ6xy7zLa5p6hqvDETx32HoG_UWMfEVE4F3pqU5cIQwKcwEFdig; unc=tIJ111616537; __mta=140883597.1587173692374.1587175883595.1587176003433.6; firstTime=1587176043162; _lxsdk_s=1718aec54f2-914-421-159%7C%7C771", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36" } r = requests.get(url, headers=headers) print(r) if r: r.encoding = 'utf-8' data = json.loads(r.text) print(data) if data['data']['searchResult']: for j in data['data']['searchResult']: title = j['title'] address = j['address'] avgscore = str(j['avgscore']) avgprice = str(j['avgprice']) ff.writerow([title,address,avgscore,avgprice]) print("正在写入{},{},{},{}". format(title, address, avgscore,avgprice)) else: pass if __name__ == '__main__': get_data(32)

数据分析代码

''' @Author: Runsen @微信公众号: 润森笔记 @博客: https://blog.csdn.net/weixin_44510615 @Date: 2020/4/18 ''' ''' 处理数据 ''' # 读取数据 import pandas as pd from collections import Counter from pyecharts.charts import Map # 地图 from pyecharts import options as opts # 初始化配置项 data = pd.read_csv("meituan.csv",encoding='gbk') print(data.columns) print(data.info()) # 去除人均消费0的餐馆 print(data[data['人均消费'] == 0]) indexs = data[data['人均消费'] == 0].index data.drop(index=indexs,inplace=True,axis=0) print(data.info()) # 提取区域处理 data['location'] = data['地址'].str[:3] def get_pair(data): pair = [] for i in range(len(data)): pair_tuple = (data.index[i], int(data[i])) pair.append(pair_tuple) return pair def plot(pair,title,max): map = Map(init_opts=opts.InitOpts(width='900px', height='800px')) map.add(series_name='城市', data_pair=pair, maptype='北京') map.set_global_opts(title_opts=opts.TitleOpts(title=title), visualmap_opts=opts.VisualMapOpts(max_=max)) map.render('{}.html'.format(title)) if __name__ == '__main__': locat_list = data['location'].tolist() mydict = Counter(locat_list) hanbao_nums = pd.Series(mydict) nums_pair = get_pair(hanbao_nums) print(nums_pair) print(type(nums_pair)) plot(nums_pair,"北京汉堡的外卖店的各区分布的数量",40) avgscore = data.pivot(columns='location', values='人均评分').mean(axis=0) avgscore_pair = get_pair(avgscore) plot(avgscore_pair,"北京汉堡的外卖店的人均评分",5) avgprice = data.pivot(columns='location', values='人均消费').mean(axis=0) avgprice_pair = get_pair(avgprice) plot(avgprice_pair,"北京汉堡的外卖店的人均消费",35)

立即咨询,获取加盟资料
您可以根据下列意向选择快捷留言

我对项目很感兴趣,请尽快寄资料给我!

请问我所在的地区有加盟商了吗?

我想详细了解加盟流程!

加盟该项目能得到哪些支持?

我想加盟请电话联系我!

加盟所需要的费用有哪些?

项目很好,请尽快联系我详谈!

*姓名:
*电话:
留言:
*验证码:
已有0人阅读
天林茶诚邀加盟
天林茶

天林茶

投资额度:3万以下

所属分类:茶叶店

  • 公司名称:福建省天林茶业有限公司
  • 企业类型:有限公司
  • 注册资金:3万以下
免费电话咨询

24小时服务热线

栏目ID=0的表不存在(操作类型=0)
栏目ID=0的表不存在(操作类型=0)
    栏目ID=0的表不存在(操作类型=0)
最新加入的品牌