做个合格的吃货~利用Python爬取美食网站3032个菜谱并分析

导语:

这两天气温急剧下降,天冷的小编实在是不想出门,到了饭点~诶!兴冲冲点开某团美滋滋点了个外卖!然后就是等了快两小时(天气恶劣铁汁萌也要理解下外卖员下雪之后路面也滑咱也不要催单)终于等到外卖结果没吃几口……踩雷了!(重点难吃还贵)

于是,我默默打开了各大美食网站,如豆果美食、下厨房、美食天下等。经过甄选,最终爬取了豆果网最新发布的中国菜系共3032个菜谱,然后清洗数据并做可视化分析,试图走上美食博主的康庄大道。

想领取更多完整源码跟Python学习资料可私信我或点击这行字体

 

01.数据获取 

豆果美食网的数据爬取比较简单

图片

豆果美食网

本次爬取的数据范围为川菜、粤菜、湘菜等八个中国菜系,包含菜谱名、链接、用料、评分、图片等字段。限于篇幅,仅给出核心代码。

1# 主函数
 2def main(x):
 3    url = 'https://www.douguo.com/caipu/{}/0/{}'.format(caipu,x*20)
 4    print(url)
 5    html = get_page(url)
 6    parse_page(html,caipu)
 7
 8if __name__ == '__main__':
 9    caipu_list = ['川菜', '湘菜','粤菜','东北菜','鲁菜','浙菜','湖北菜','清真菜'] #中国菜系
10    start = time.time()  # 计时
11    for caipu in caipu_list:
12        for i in range(22):
13            # 爬取多页
14            main(x=i)
15            time.sleep(random.uniform(1, 2))
16            print(caipu,"第" + str(i+1) + "页提取完成")
17    end = time.time()
18    print('共用时',round((end - start) / 60, 2), '分钟')

02.数据清洗

短短几分钟就爬下了3032个菜谱信息,为了方便可视化分析,还需要对爬取的数据进行简单清洗。本文数据清洗主要用到Python的Pandas库,如果您对Pandas感兴趣,可查看J哥往期原创专辑「Pandas基础系列」,共五篇。

导入数据

用pd.read方法导入爬取到的菜谱数据,并添加列名。预览数据如下:

图片

删除重复项

爬虫过程中少量菜谱数据被重复抓取,需要用drop_duplicates方法删除。

图片

缺失值处理

通过info方法发现少量记录含有缺失值,用dropna方法删除。

图片

评分字段清洗

爬取的评分字段含有多余的字符串且为object类型,需要替换多余字符串并转换为数字类型,方便后续计算。

图片

添加用料数字段

为方便菜谱用料分析,需要根据用料字段计算出每个

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
为了实现Python美食推荐,我们可以使用协同过滤推荐算法。协同过滤是一种基于用户行为的推荐算法,它可以根据用户的历史行为和偏好,向用户推荐他们可能感兴趣的物品。在美食推荐系统中,我们可以根据用户的历史搜索记录、点赞记录、购买记录等信息,向用户推荐他们可能喜欢的美食。 下面是一个简单的Python美食推荐系统的例子: ```python import pandas as pd from sklearn.metrics.pairwise import cosine_similarity # 加载数据 recipes = pd.read_csv('recipes.csv') ratings = pd.read_csv('ratings.csv') # 计算用户相似度 user_ratings = ratings.pivot_table(index=['user_id'], columns=['recipe_id'], values='rating') user_ratings = user_ratings.fillna(0) user_similarity = cosine_similarity(user_ratings) # 根据用户相似度推荐美食 def get_recipe_recommendations(user_id): sim_scores = list(enumerate(user_similarity[user_id])) sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True) sim_scores = sim_scores[1:6] recipe_indices = [i[0] for i in sim_scores] return recipes.iloc[recipe_indices] ``` 在这个例子中,我们首先加载了两个数据集:recipes和ratings。recipes数据集包含了所有的美食信息,包括美食名称、食材、制作方法等;ratings数据集包含了用户对美食的评分信息。 接下来,我们使用协同过滤算法计算用户相似度。具体来说,我们首先将ratings数据集转换成一个用户-美食评分矩阵,然后使用余弦相似度计算用户之间的相似度。 最后,我们可以根据用户相似度推荐美食。具体来说,我们首先计算当前用户与其他用户之间的相似度,然后选择与当前用户相似度最高的5个用户,根据这些用户的历史评分信息,向当前用户推荐5个美食

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值