前言

@Author:By Runsen

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

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

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

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

美团外卖数据采集python_美团外卖数据采集器 第1张


美团外卖数据采集python_美团外卖数据采集器 第2张


美团外卖数据采集python_美团外卖数据采集器 第3张


爬虫

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

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

美团外卖数据采集python_美团外卖数据采集器 第4张


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

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

美团外卖数据采集python_美团外卖数据采集器 第5张


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

美团外卖数据采集python_美团外卖数据采集器 第6张


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

美团外卖数据采集python_美团外卖数据采集器 第7张


数据找到了,就赶紧把发送了请求找出来,简单的发现了请求就是这个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

美团外卖数据采集python_美团外卖数据采集器 第8张


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

美团外卖数据采集python_美团外卖数据采集器 第9张


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

美团外卖数据采集python_美团外卖数据采集器 第10张


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

美团外卖数据采集python_美团外卖数据采集器 第11张


数据分析

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

美团外卖数据采集python_美团外卖数据采集器 第12张


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

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

美团外卖数据采集python_美团外卖数据采集器 第13张


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

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

美团外卖数据采集python_美团外卖数据采集器 第14张


人均评分

美团外卖数据采集python_美团外卖数据采集器 第15张


人均消费

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

爬虫代码'''@Author: Runsen@微信公众号: 润森笔记@博客: https://blog.csdn.net/weixin_44510615@Date: 2020/4/17''''''JSONDecodeError: Expecting value: line 1 column 1cookie会失效'''import jsonimport csvimport requestsdef 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:                passif __name__=='__main__':    get_data(32)数据分析代码'''@Author: Runsen@微信公众号: 润森笔记@博客: https://blog.csdn.net/weixin_44510615@Date: 2020/4/18''''''处理数据'''# 读取数据import pandas as pdfrom collections import Counterfrom 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].indexdata.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 pairdef 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)


微信号:565859400(QQ)
添加上方QQ技术, 在线咨询
复制微信号