zoukankan      html  css  js  c++  java
  • 周末福利!用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()

    把​地方改成你们相对应的地点,找到自己喜欢吃的地方,快带约上自己的女朋友、小伙伴一起去打卡吧~

     
    如果觉得有帮助,记得点赞收藏转发哈~​
     
    小编的动力来自于你们的喜欢
     
     
  • 相关阅读:
    Data Wrangling文摘:Non-tidy-data
    Data Wrangling文摘:Tideness
    Python文摘:Mixin 2
    Python文摘:Mixin
    Python文摘:Python with Context Managers
    Python学习笔记11
    SQL学习笔记9
    SQL学习笔记8
    SQL学习笔记7
    Python学习笔记10:内建结构
  • 原文地址:https://www.cnblogs.com/hahaa/p/15448883.html
Copyright © 2011-2022 走看看