大众点评爬取------分析成都必吃菜

本文通过模拟手机浏览器数据采集,分析大众点评成都必吃菜排行榜。研究了菜品分布、人均消费、评论数量等指标,发现冰粉热度最高,口水鸡最低。并利用评论生成词云图,揭示用户关注点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景介绍:大众点评必吃榜是基于大众点评的海量用户大数据和用户实地体验验证综合评选出的美食榜单,作为必系列榜单之一力求在吃逛玩住四大领域深挖城市消费场景,为用户提供快速、高效、权威可信任的出行及消费参考,打造城市的品质生活指南。
查找方式:打开【大众点评app】—首页【必系列】——找到【必吃榜】/搜索【必吃榜】

在这里插入图片描述
由于此页面仅存在于手机版中,因此选用手机浏览器模拟方式进行数据采集,将采集到的数据导入python,进行数据分析。

import pandas as pd
import numpy as np
dishes = pd.read_csv('dish.csv',index_col=0)#成都必吃菜
#index_col=0,读取时不要生成index,因为之前按店铺排名已经生成了一个排序,如果再生成index会造成混淆
dishes.head()

在这里插入图片描述
smallten为每个品类的排名,pinlei为后期生成的品类名称,vendorname为店铺名称,price-wrap为人均消费,dishname为菜品名称,recomm为推荐人数,site为商区,dishdec为菜品评论。人均和评论均存在缺失值,按大类分析,因此将人均按每类均值进行填充,评论维持空缺。

#每个品类推荐店铺数,共31
店铺 = dishes.groupby('pinlei')['dishName'].count()
from pyecharts import Bar
bar = Bar("每个品类推荐店铺数", "成都")
bar.add("店铺数", 店铺.inde
### 构建基于Python的美食推荐系统 #### 使用大众点评数据源实现方法教程 为了构建一个基于Python的美食推荐系统,可以从以下几个方面入手: #### 获取数据 要从大众点评网站抓取数据,可以使用`requests`库发送HTTP请求,并利用`pyquery`解析HTML文档。具体操作如下所示[^1]。 ```python from pyquery import PyQuery as pq import requests url = 'https://www.dianping.com/search/keyword/20/0_成都火锅' headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" } response = requests.get(url, headers=headers) doc = pq(response.text) items = doc('.shop-all-list li').items() for item in items: title = item.find('h4').text() # 店名 address = item.find('.addr').text() # 地址 avg_price = item.find('.price').text().strip('¥') # 平均消费价格 review_count = item.find('.review-num b').text() # 用户评价数量 print(f'店名:{title},地址:{address},平均消费价格: {avg_price}元,用户评价数量: {review_count}') ``` 这段代码展示了如何通过`PyQuery`提取网页中的特定信息,如店铺名称、地址、人均消费金额以及评论数等字段。需要注意的是,在实际应用过程中应当遵循目标站点的服务条款,合理合法地爬取公开可访问的信息。 #### 数据预处理 收集到原始数据后,需对其进行清洗和转换以便后续分析。这一步骤可能涉及去除重复项、填补缺失值、标准化数值范围等工作。Pandas是一个非常适合此类任务的强大工具包。 ```python import pandas as pd data = {'name': [], 'location':[], 'average_cost':[], 'reviews_num':[]} # 假设已经完成了上述循环遍历并将结果存储到了列表中... df = pd.DataFrame(data) def clean_dataset(df): df.drop_duplicates(inplace=True) # 删除完全相同的记录 df['average_cost'] = pd.to_numeric(df['average_cost'], errors='coerce') df.fillna({'average_cost': df['average_cost'].mean()}, inplace=True) cleaned_df = clean_dataset(df.copy()) print(cleaned_df.head()) ``` 此部分实现了简单的DataFrame创建与基本清理工作,包括删除重复条目、将字符串类型的成本列转为浮点型并填充任何潜在的空缺位置。 #### 推荐算法设计 对于美食推荐系统的开发而言,协同过滤是一种常用的技术路线。这里介绍两种主要形式——基于用户的协同过滤(User-based Collaborative Filtering) 和基于物品的协同过滤(Item-based Collaborative Filtering)[^2]。 - **基于用户的协同过滤**:寻找具有相似口味偏好的其他顾客群体并向其推送他们喜欢过的餐厅; - **基于物品的协同过滤**:计算不同餐馆之间的相似度得分,向当前浏览者展示那些与其历史兴趣相近的地方; Scikit-Learn提供了多种机器学习模型供开发者选用,其中KNN(K Nearest Neighbor)分类器能够很好地支持这两种策略的应用场景。 ```python from sklearn.neighbors import KNeighborsClassifier from scipy.sparse import csr_matrix matrix = cleaned_df.pivot_table(index=['name', 'location'], columns='user_id', values='rating').fillna(0).T sparse_matrix = csr_matrix(matrix.values) model_knn = KNeighborsClassifier(metric='cosine', algorithm='brute') model_knn.fit(sparse_matrix) distances, indices = model_knn.kneighbors( sparse_matrix, n_neighbors=10 ) ``` 以上片段说明了怎样建立稀疏矩阵表示法下的评分表格结构,并训练了一个采用余弦距离作为衡量标准的最近邻查找器实例化对象。最终返回给定样本周围最接近它的十个邻居索引及其对应的距离权重系数。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值