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.5, 3])], center=["20%", "50%"], radius=[60, 80], ) c.add( "", [list(z) for z in zip(["热量", "脂肪",'碳水化合物','蛋白质'], [100,4,12, 4])], center=["55%", "50%"], radius=[60, 80], ) 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 小结
当然我们不太好找到一一对应每样食物的的营养,就只能找类似的,木下对比后,发现相差不大,就可以等价替换咯,所以数据有一定的误差,要是有更好的参考可以告诉小编噢。