周末福利!用Python爬取美團美食信息,吃貨們走起來!


大周末的,不犒勞一下自己,怎么對得起一周的辛勤工作呢,對吧。
 
那么跟我一起來爬一下你所在的城市美食吧​
 
基本開發環境
  • 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電子書籍,以及視頻源的源代碼!
還會有大佬解答!
都在這個群里了  點擊藍色字體(我)獲取
歡迎加入,一起討論 一起學習!
 
需求數據來源分析
 
 
 
某團上面這些數據都是可以獲取的,當然還有商家的電話也是可以的。
 
一般去找數據的話都是從開發者工具里面進行抓包分析,復制想要的數據內容然后進行搜索。
 
 
如果是這樣找數據的話,是沒有什么問題的,但是對於美團這個網站來說,這樣沒有辦法進行多頁數據爬取。
 
某團的數據要從第二頁找,這樣才能進行多頁數據爬取。
 
 
 
代碼實現
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()

 

 

 

把​地方改成你們相對應的地點,找到自己喜歡吃的地方,快帶約上自己的女朋友、小伙伴一起去打卡吧~

 
如果覺得有幫助,記得點贊收藏轉發哈~​
 
小編的動力來自於你們的喜歡
 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM