大周末的,不犒勞一下自己,怎么對得起一周的辛勤工作呢,對吧。
那么跟我一起來爬一下你所在的城市美食吧
基本開發環境
-
Python 3.6
-
Pycharm
相關模塊的使用
# 爬蟲模塊使用 import requests import re import csv # 數據分析模塊 import pandas as pd import numpy as np from pyecharts.charts import * from pyecharts import options as opts from pyecharts.globals import ThemeType #引入主題
安裝Python並添加到環境變量,pip安裝需要的相關模塊即可。
兄弟們學習python,有時候不知道怎么學,從哪里開始學。掌握了基本的一些語法或者做了兩個案例后,不知道下一步怎么走,不知道如何去學習更加高深的知識。
那么對於這些大兄弟們,我准備了大量的免費視頻教程,PDF電子書籍,以及視頻源的源代碼!
還會有大佬解答!
都在這個群里了 點擊藍色字體(我)獲取
歡迎加入,一起討論 一起學習!
那么對於這些大兄弟們,我准備了大量的免費視頻教程,PDF電子書籍,以及視頻源的源代碼!
還會有大佬解答!
都在這個群里了 點擊藍色字體(我)獲取
歡迎加入,一起討論 一起學習!
需求數據來源分析


某團上面這些數據都是可以獲取的,當然還有商家的電話也是可以的。
一般去找數據的話都是從開發者工具里面進行抓包分析,復制想要的數據內容然后進行搜索。

如果是這樣找數據的話,是沒有什么問題的,但是對於美團這個網站來說,這樣沒有辦法進行多頁數據爬取。
某團的數據要從第二頁找,這樣才能進行多頁數據爬取。


代碼實現
for page in range(0, 1537, 32): # time.sleep(2) url = 'https://apimobile.meituan.com/group/v4/poi/pcsearch/30' data = { 'uuid': '96d0bfc90dfc441b81fb.1630669508.1.0.0', 'userid': '266252179', 'limit': '32', 'offset': page, 'cateId': '-1', 'q': '烤肉', 'token': '你自己的token', } headers = { 'Referer': 'https://sz.meituan.com/', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } response = requests.get(url=url, params=data, headers=headers) result = response.json()['data']['searchResult'] for index in result: shop_id = index['id'] index_url = f'https://www.meituan.com/meishi/{shop_id}/' dit = { '店鋪名稱': index['title'], '人均消費': index['avgprice'], '店鋪評分': index['avgscore'], '評論人數': index['comments'], '所在商圈': index['areaname'], '店鋪類型': index['backCateName'], '詳情頁': index_url, } csv_writer.writerow(dit) print(dit) f = open('美團烤肉數據.csv', mode='a', encoding='utf-8', newline='') csv_writer = csv.DictWriter(f, fieldnames=[ '店鋪名稱', '人均消費', '店鋪評分', '評論人數', '所在商圈', '店鋪類型', '詳情頁', ]) csv_writer.writeheader()
爬取數據展示

數據分析代碼實現及效果
import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline plt.rcParams['font.sans-serif'] = ['SimHei'] # 設置加載的字體名 plt.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題 fig,axes=plt.subplots(2,1,figsize=(12,12)) sns.regplot(x='人均消費',y='店鋪評分',data=df,color='r',marker='+',ax=axes[0]) sns.regplot(x='評論人數',y='店鋪評分',data=df,color='g',marker='*',ax=axes[1])

所在商圈烤肉店鋪數量top10
df2 = df.groupby('所在商圈')['店鋪名稱'].count() df2 = df2.sort_values(ascending=True)[-10:] df2 = df2.round(2) c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND)) .add_xaxis(df2.index.to_list()) .add_yaxis("",df2.to_list()).reversal_axis() #X軸與y軸調換順序 .set_global_opts(title_opts=opts.TitleOpts(title="商圈烤肉店數量top10",subtitle="數據來源:美團",pos_left = 'center'), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改橫坐標字體大小 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改縱坐標字體大小 ) .set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='right')) ) c.render_notebook()

商圈烤肉店鋪評分top10
df4 = df.groupby('評分類型')['店鋪名稱'].count() df4 = df4.sort_values(ascending=False) regions = df4.index.to_list() values = df4.to_list() c = ( Pie(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND)) .add("", zip(regions,values)) .set_global_opts(title_opts=opts.TitleOpts(title="不同評分類型店鋪數量",subtitle="數據來源:美團",pos_top="-1%",pos_left = 'center')) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%",font_size=18)) ) c.render_notebook()

不同評分類型店鋪數量
df4 = df.groupby('評分類型')['店鋪名稱'].count() df4 = df4.sort_values(ascending=False) regions = df4.index.to_list() values = df4.to_list() c = ( Pie(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND)) .add("", zip(regions,values)) .set_global_opts(title_opts=opts.TitleOpts(title="不同評分類型店鋪數量",subtitle="數據來源:美團",pos_top="-1%",pos_left = 'center')) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%",font_size=18)) ) c.render_notebook()

不同店鋪類型店鋪數量
df6 = df.groupby('店鋪類型')['店鋪名稱'].count() df6 = df6.sort_values(ascending=False)[:10] df6 = df6.round(2) regions = df6.index.to_list() values = df6.to_list() c = ( Pie(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND)) .add("", zip(regions,values),radius=["40%", "75%"]) .set_global_opts(title_opts=opts.TitleOpts(title="不同店鋪類型店鋪數量",pos_top="-1%",pos_left = 'center')) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}",font_size=18)) ) c.render_notebook()

不同店鋪類型店鋪評分
df6 = df.groupby('店鋪類型')['店鋪評分'].mean() df6 = df6.sort_values(ascending=True) df6 = df6.round(2) df6 = df6.tail(10) c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND)) .add_xaxis(df6.index.to_list()) .add_yaxis("",df6.to_list()).reversal_axis() #X軸與y軸調換順序 .set_global_opts(title_opts=opts.TitleOpts(title="不同店鋪類型評分",subtitle="數據來源:美團",pos_left = 'center'), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改橫坐標字體大小 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改縱坐標字體大小 ) .set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='right')) ) c.render_notebook()

不同店鋪類型店鋪評論人數
df7 = df.groupby('店鋪類型')['評論人數'].sum() df7 = df7.sort_values(ascending=True) df7 = df7.tail(10) c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND)) .add_xaxis(df7.index.to_list()) .add_yaxis("",df7.to_list()).reversal_axis() #X軸與y軸調換順序 .set_global_opts(title_opts=opts.TitleOpts(title="不同店鋪類型評論人數",subtitle="數據來源:美團",pos_left = 'center'), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改橫坐標字體大小 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改縱坐標字體大小 ) .set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='right')) ) c.render_notebook()
把地方改成你們相對應的地點,找到自己喜歡吃的地方,快帶約上自己的女朋友、小伙伴一起去打卡吧~
如果覺得有幫助,記得點贊收藏轉發哈~
小編的動力來自於你們的喜歡
