查看原文
其他

用python爬取肯德基早餐,并进行数据分析来搭配营养早餐

凹凸数据 2021-08-09

The following article is from 木下学Python Author 木下瞳

每晚九点,我们准时相约  


大家好,我是朱小五


「凹凸数据」读者交流①群的“木下瞳”同学最近分析了肯德基的早餐,小五觉得角度还挺有趣,就重新排版整理分享给大家。


公众号后台回复「进群」,欢迎加入读者交流群~

00 前言


肯德基发展了那么多年,他们的食物也随之发生了很多变化,记得以前刚出早餐的时候,也就几个品种,有点单一,然而现在的花样是越来越多,套餐五花八门,各种搭配。


木下爬取了肯德基早餐的菜单,来看看 KFC 的早餐热量,碳水化合物,脂肪,蛋白质是什么水平的,搭配出属于我们自己的套餐吧~~~


01 爬虫 


我们先打开肯德基宅急送的网上订餐首页


https://www.4008823823.com.cn/kfcios/Html/Croissant.html


可以看到各种我们想要的信息



我们要爬取的信息有餐名,内容,价格,图片链接,我们查看源代码,发现网页是静态的:



我们可以使用正则表达式直接进行提取我们需要的数据:


def get_info(response):
    # 提取早餐信息
    # 餐名
    titles = re.findall('alt="(.*?)"',response.text,re.S)
    # 食物内容
    foods = re.findall('descCn="(.*?)"',response.text,re.S)
    # 价格
    prices = re.findall('price="(.*?)"',response.text,re.S)
    # 图片链接
    img_urls = re.findall('<img src="(.*?)"',response.text,re.S)
    infos = zip(titles,foods,prices,img_urls)
    return list(infos)


提取出我们的数据后,我们选择使用 csv 进行保存,保存结果如下:



完整爬虫代码,见文末获取。


02 早餐词云


我们来看一看 KFC 的早餐主要都有什么内容:


#词云生成
mask = imageio.imread("foodName.jpg")
w = wordcloud.WordCloud(background_color = 'white',
                        width = 1000,height = 700,
                        font_path = 'msyh.ttc',
                        mask = mask)
w.generate(txt)
w.to_file('wordcloud.png')



我们可以看到主食主要有汉堡,鸡肉,皮蛋瘦肉粥等;小吃有鸡蛋,红薯饼,芝士等;饮品类的主要就是咖啡豆浆等;而且还分西式与法式的种类。


让我们从主食,小吃,饮品的角度看一看它们的营养吧。


关于热量,脂肪,碳水化合物,蛋白质小编是从一个食物热量的网站查询的,搜了搜肯德基的食品,虽说不能完全对应每件食品,但同种类食品的数值相差不大,含量(每100克)。


http://www.boohee.com


hamburger = {
    '热量' : 250,
    '脂肪' : 10,
    '碳水化合物' : 20,
    '蛋白质' : 10
}


我们查询并手动给食品赋值,这样在后续文章中就可以统计营养分布了。


03 主食营养分布


KFC 主食主要可以分为汉堡,饭团,鸡肉,粥这几大类,我们来看一看它们的营养数值分布情况吧:


x = ['汉堡','饭团','粥','鸡肉']
y1 = [250,200,50,255]
y2 = [10,11,1.5,15]
y3 = [20,21,8,10]
y4 = [10,6,2.5,21]
c = Bar()
c.add_xaxis(x)
c.add_yaxis("热量", y1, stack="stack1")
c.add_yaxis("脂肪", y2, stack="stack1")
c.add_yaxis("碳水化合物", y3, stack="stack1")
c.add_yaxis("蛋白质", y4, stack="stack1")
c.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
c.set_global_opts(title_opts=opts.TitleOpts(title="主食营养分布"))
#c.render_notebook()
c.render('主食营养分布.html')



我们看到 ,KFC 的早餐的热量都还是挺高的(每 100g),尤其是汉堡,饭团,鸡肉类的主食,要是天气较冷的话,选择这三类作为主食,或许是一个不错的选择呢。


04 小吃营养分布


从页面上看出的提供了这么几种小吃,大可分为茶叶蛋,油条,薯饼,蛋挞这几类,太阳蛋跟蛋挞差不多暂且算成蛋挞。


那让我们来看看小吃的营养分布是如何的吧(每 100g 的含量):



看起来是油条热量最高呢,小编觉得茶叶蛋不错,也挺好吃的,热量这些也相对较低,蛋白质的占比相对其他的也是最高的。


当然了,正在减肥,油条建议少吃。


05 饮品营养分布


当然了,早餐来一杯腾腾的咖啡或豆浆是多么的惬意啊,KFC 早餐也提供了咖啡豆浆供我们选择:


from pyecharts import options as opts
from pyecharts.charts import Pie

c = Pie()
c.add(
        "",
        [list(z) for z in zip(["热量""脂肪",'碳水化合物','蛋白质'],
                              [31,2,1.53])],
        center=["20%""50%"],
        radius=[6080],
    )
c.add(
        "",
        [list(z) for z in zip(["热量""脂肪",'碳水化合物','蛋白质'],
                              [100,4,124])],
        center=["55%""50%"],
        radius=[6080],
    )
c.set_global_opts(
        title_opts=opts.TitleOpts(title="豆浆(左)咖啡(右)"),
        legend_opts=opts.LegendOpts(
            type_="scroll", pos_top="200%", pos_left="80%", orient="vertical"
        ),
    )
c.render('豆浆咖啡.html')



在热量上都相差不多,但蛋白质的话,豆浆所含的蛋白质占比就相对较多,如果午饭时间吃的较晚的话,可以选择豆浆,蛋白质带来的饥饿感会相对较少。


06 小结


当然我们不太好找到一一对应每样食物的的营养,就只能找类似的,木下对比后,发现相差不大,就可以等价替换咯,所以数据有一定的误差,要是有更好的参考可以告诉小编噢。


本文以趣味为主,也欢迎大家一起发掘身边的数据,一起搞事情!



  • 作者:木下瞳,公众号「木下学Python」

  • 整理:朱小五,公众号「凹凸数据」





文中数据和完整爬虫、可视化代码

关注公众号「凹凸数据」后台回复“肯德基”即可获取








近期文章,点击图片即刻查看

后台回复「进群」,加入读者交流群~

昨日最多赞留言“月牙弯弯”+25积分;

最有价值留言“心扉”+50积分

点击积分,了解积分规则~

今天金主爸爸要求8点发文,所以提前推送了

所以在原有的积分规则上,今天在本条或头条文章留言的同学统一 +10积分

朱小五

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存