我个人向来很讨厌标题党的,所以事出有因,起这个标题肯定是与内容相符合的,不信你慢慢看。


目录

分析网站

数据爬取

数据分析

后记


分析网站

昨天由于有人跟我说需要美团上美食栏目的数据,问我能不能给她弄一份,于是有了本文。

本文主要讲爬取美团上不同地区的美食数据以及对它进行分析写成一份攻略,由于疫情原因,鄙人对火锅已经馋到无火锅人将癫的地步,所以我们选择广州地区的火锅进行获取,小提示,url是根据不同地区更改的,比如广州就是gz.meituan。

我们对美团网站进行分析,选择美食,选择火锅,其余条件全部,发现数据是动态获取的,我们尝试通过BeautifulSoup获取script标签内的内容试试。

html = response.content.decode()
soup = BeautifulSoup(html, 'lxml')
soup = soup.find_all('script')
print(soup)

通过打印我们发现了店铺信息

接下来的事就一气呵成了,美团也方便,每个页面的的url是通过数字改变的,我们通过构造url来实现换页提取,网站上显示100多页,但通过实际查看发现只给出了67页,最后爬下来的数据也就1005个,但是它给出的数据是2200多个,也就是还有1000多个数据没有办法获取到,暂时不知道为啥。

url='https://gz.meituan.com/meishi/c17/pn'
def url_list(url):  # 构建页地址列表get_url_list = []for i in range(1, 68):get_url_list.append(url+'%s/'%str(i))return get_url_list

数据爬取

经过前面的铺垫,一切也就准备就绪了,我们通过构造的url一个一个一个进行获取,将数据保存到数据库。不过却发现历经坎坷,我发现爬的时候会出现验证码,网页403,或者ip被封的情况,我猜想它的后台可能会对不是广东地区的ip进行限制访问的情况,所以我用自己的ip去获取,加个5秒的延时,也尝试过多线程多进程,但发现也会大几率出现错误,所以不要效率了,直接用时间砸,谁叫咱们闲呢,几分钟的事,拉个尿尿就完事!整体代码如下

import sqlite3
import time
import requests
import json
from lxml import etree
from bs4 import BeautifulSoupdef meituan_opendb():conn = sqlite3.connect("meituan_date.db")cur = conn.execute("""create table if not exists meishi_info(id integer PRIMARY KEY autoincrement,poiId varchar(30),infourl varchar(126),name varchar(256),avgScore varchar(30),address varchar(256),allCommentNum varchar(30),avgPrice varchar(30))""")return cur,conn#  往数据库中添加内容
def meituan_insertData(poiId,infourl,name,avgScore,address,allCommentNum,avgPrice):hel = meituan_opendb()hel[1].execute("insert into meishi_info(poiId,infourl,name,avgScore,address,allCommentNum,avgPrice) values ('%s','%s','%s','%s','%s','%s','%s')"%(poiId,infourl,name,avgScore,address,allCommentNum,avgPrice))hel[1].commit()hel[1].close()# 查询用户全部信息
def meituan_showAll():hel = meituan_opendb()cur = hel[1].cursor()cur.execute("select * from meishi_info")res = cur.fetchall()cur.close()return resdef url_list(url):  # 构建页地址列表get_url_list = []for i in range(1, 68):get_url_list.append(url+'%s/'%str(i))return get_url_list
# url_list(url)
def get_url(url):  # 解析美食页,获取美食的名字,平均价格,平均分数, 评论数response = requests.get(url)html = response.content.decode()soup = BeautifulSoup(html, 'lxml')soup = soup.find_all('script')print(soup)text = soup[14].get_text().strip()
#         print(text)text = text[19:-1]result = json.loads(text)
#         print(result)results = result['poiLists']count=results['totalCounts']print('火锅店总数为:%s'%count)results = results['poiInfos']allinfo=[]for i in results:allinfo.append([i['poiId'],"https://gz.meituan.com/meishi/"+str(i['poiId']),i['title'], i['avgScore'], i['address'], i['allCommentNum'], i['avgPrice']])return allinfo  # 获取的原数据def main(urls):for url in url_list(urls):a = get_url(url)
#         print(a)for i in a:meituan_insertData(str(i[0]),str(i[1]),str(i[2]),str(i[3]),str(i[4]),str(i[5]),str(i[6]))print(url+'-----该页完成!')time.sleep(5)urls='https://gz.meituan.com/meishi/c17/pn'
main(urls)

数据分析

凉拌菜上完了,该上热菜了 。获取的数据如下。

#数据库格式
(poiId ,infourlname ,avgScore ,address , allCommentNum ,avgPrice)
(1, '164631746', 'https://gz.meitua', '十七门重庆老火锅', '5', '番禺区钟村', '1874', '81')
#序号,商铺Id,商铺详情地址,店名,评分,地址,评论数,平均消费

来了,暴力分析,先看看总共多少数据。

allinfo=meituan_showAll()
print("广州地区美团上火锅店总共有:%s家"%len(allinfo))广州地区美团上火锅店总共有:1005家

按条件分析,首先找到评分大于或等于4,评论数大于或等于2000的店家

for i in allinfo:socre_4_comm_2000={}if float(i[4])>=4 and float(i[6])>=2000:socre_4_comm_2000['商家名字']=i[3]socre_4_comm_2000['商家地址']=i[5]socre_4_comm_2000['商家评分']=i[4]socre_4_comm_2000['商家评论数']=i[6]socre_4_comm_2000['平均个人消费']=i[7]first.append(socre_4_comm_2000)评分大于或等于4,评论数大于或等于2000的店家共有:68家
[{'商家名字': '蒙肥羊自助餐厅(岗顶店)', '商家地址': '天河区天河路岗顶百脑汇6楼', '商家评分': '5', '商家评论数': '55190', '平均个人消费': '57'}...................]

我们去看看网站实际评论情况,看看这条件符不符合

嘿嘿,好像不错的样子,学生党,我们再加个条件,消费不要那么高,我们设置平均消费不超过50

for i in allinfo:socre_4_comm_2000={}if float(i[4])>=4 and float(i[6])>=2000 and float(i[7])<=50:socre_4_comm_2000['商家名字']=i[3]socre_4_comm_2000['商家地址']=i[5]socre_4_comm_2000['商家评分']=i[4]socre_4_comm_2000['商家评论数']=i[6]socre_4_comm_2000['平均个人消费']=i[7]first.append(socre_4_comm_2000)

最后我们再分地区,两个条件都试试

a=['越秀', '天河', '番禺', '海珠', '白云', '荔湾', '黄埔', '增城', '花都', '从化', '南沙']
first=[]
j=0
while j<10:for i in allinfo:socre_4_comm_2000={}if float(i[4])>=4 and float(i[6])>=2000 and float(i[7])<=50 and a[j] in i[5][0:3]:socre_4_comm_2000['商家名字']=i[3]socre_4_comm_2000['商家地址']=i[5]socre_4_comm_2000['商家评分']=i[4]socre_4_comm_2000['商家评论数']=i[6]socre_4_comm_2000['平均个人消费']=i[7]first.append(socre_4_comm_2000)print("评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在%s共有:%s家"%(a[j],len(first)))
#     print(first)j+=1first=[]广州地区美团上火锅店总共有:1005家
评分大于或等于4,评论数大于或等于2000的店家越秀共有:6家
评分大于或等于4,评论数大于或等于2000的店家天河共有:23家
评分大于或等于4,评论数大于或等于2000的店家番禺共有:11家
评分大于或等于4,评论数大于或等于2000的店家海珠共有:4家
评分大于或等于4,评论数大于或等于2000的店家白云共有:13家
评分大于或等于4,评论数大于或等于2000的店家荔湾共有:1家
评分大于或等于4,评论数大于或等于2000的店家黄埔共有:3家
评分大于或等于4,评论数大于或等于2000的店家增城共有:3家
评分大于或等于4,评论数大于或等于2000的店家花都共有:3家
评分大于或等于4,评论数大于或等于2000的店家从化共有:0家
评分大于或等于4,评论数大于或等于2000的店家南沙共有:1家广州地区美团上火锅店总共有:1005家
评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在越秀共有:1家
评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在天河共有:9家
评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在番禺共有:3家
评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在海珠共有:1家
评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在白云共有:3家
评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在荔湾共有:0家
评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在黄埔共有:2家
评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在增城共有:0家
评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在花都共有:0家
评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在从化共有:0家我们打印出详情:广州地区美团上火锅店总共有:1005家
评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在越秀共有:1家
[{'商家名字': '傣妹火锅(光明广场店)', '商家地址': '越秀区西湖路63号光明广场L7层(地铁6号线北京路站)', '商家评分': '4.1', '商家评论数': '3854', '平均个人消费': '45'}]广州地区美团上火锅店总共有:1005家
评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在天河共有:9家
[{'商家名字': '十里香牛杂煲(优创汇店)', '商家地址': '天河区迎龙路5号302室', '商家评分': '4.1', '商家评论数': '4995', '平均个人消费': '46'}...............]

最后我们统计一下适合我们的店铺

a=['越秀', '天河', '番禺', '海珠', '白云', '荔湾', '黄埔', '增城', '花都', '从化', '南沙']
cxk={}
first=[]
j=0
while j<10:for i in allinfo:socre_4_comm_2000={}if float(i[4])>=4 and float(i[6])>=2000 and float(i[7])<=50 and a[j] in i[5][0:3]:socre_4_comm_2000['商家名字']=i[3]socre_4_comm_2000['商家地址']=i[5]socre_4_comm_2000['商家评分']=i[4]socre_4_comm_2000['商家评论数']=i[6]socre_4_comm_2000['平均个人消费']=i[7]first.append(socre_4_comm_2000)
#     print("评分大于或等于4,评论数大于或等于2000,平均消费小于或等于50的店家在%s共有:%s家"%(a[j],len(first)))
#     print(first)cxk[a[j]]=firstj+=1first=[]
print(cxk)广州地区美团上火锅店总共有:1005家,条件符合的有以下几家
{'越秀': [{'商家名字': '傣妹火锅(光明广场店)', '商家地址': '越秀区西湖路63号光明广场L7层(地铁6号线北京路站)', '商家评分': '4.1', '商家评论数': '3854', '平均个人消费': '45'}], '天河': [{'商家名字': '十里香牛杂煲(优创汇店)', '商家地址': '天河区迎龙路5号302室', '商家评分': '4.1', '商家评论数': '4995', '平均个人消费': '46'}, {'商家名字': '二郎田鸡(黄村店)', '商家地址': '天河区王园路18号(近黄村路)', '商家评分': '4.3', '商家评论数': '2732', '平均个人消费': '49'}, {'商家名字': '满汉三汁焖锅(天娱广场店)', '商家地址': '天河区天河路621-625号天娱广场B1楼', '商家评分': '4.2', '商家评论数': '7958', '平均个人消费': '27'}, {'商家名字': '聚福猪肚鸡(车陂店)', '商家地址': '天河区中山大道车陂路雅景大广场6号101A房', '商家评分': '4.9', '商家评论数': '4094', '平均个人消费': '48'}, {'商家名字': '黑山牛肉汤火锅(花城汇店)', '商家地址': '天河区花城大道89号花城汇南区B1层C06b(汉堡王旁)', '商家评分': '4.4', '商家评论数': '2938', '平均个人消费': '35'}, {'商家名字': '一香一甜韩国年糕火锅(小长今韩国料理)', '商家地址': '天河区天河路299号时尚天河商业广场东区东三街B1层039-041号铺', '商家评分': '5', '商家评论数': '2511', '平均个人消费': '44'}, {'商家名字': '上上签串串香(时尚天河商业广场店)', '商家地址': '天河区天河路299号时尚天河商业购物广场中区中C001', '商家评分': '4.1', '商家评论数': '2719', '平均个人消费': '13'}, {'商家名字': '重庆鸡公煲(车陂老店)', '商家地址': '天河区中山大道中6号A6(加悦大厦旁)', '商家评分': '4.1', '商家评论数': '4818', '平均个人消费': '42'}, {'商家名字': '淼福猪肚鸡(长兴直营店)', '商家地址': '天河区西街六巷长兴高德汇后面(停车场东门,万州烤鱼隔壁)', '商家评分': '4.1', '商家评论数': '2497', '平均个人消费': '44'}], '番禺': [{'商家名字': '淼福猪肚鸡(华侨城店)', '商家地址': '番禺区西丽南路237号(近华侨城公交站)', '商家评分': '4.5', '商家评论数': '9927', '平均个人消费': '48'}, {'商家名字': '南北和·自助火锅(番禺大石店)', '商家地址': '番禺区105国道大石段249-252号二楼(大石桥南公交车站旁)', '商家评分': '4.5', '商家评论数': '15080', '平均个人消费': '48'}, {'商家名字': '煲煲哥·招牌奇味鸡煲(洛溪店)', '商家地址': '番禺区吉祥南街30号百佳超市旁', '商家评分': '4.6', '商家评论数': '2203', '平均个人消费': '35'}], '海珠': [{'商家名字': '汤响自助回转火锅百汇(乐峰广场店)', '商家地址': '海珠区工业大道北106-108号乐峰广场2层', '商家评分': '4.5', '商家评论数': '2892', '平均个人消费': '41'}], '白云': [{'商家名字': '名扬煮艺肥牛自助火锅(花园路店)', '商家地址': '白云区新市花园路卡尔文大酒店旁(即阿曼尼酒吧对面)', '商家评分': '4.5', '商家评论数': '4648', '平均个人消费': '47'}, {'商家名字': '名扬煮艺肥牛自助火锅(连元桥店)', '商家地址': '白云区白云东街电商大厦一楼(连元大厦金博KTV后面)', '商家评分': '4.5', '商家评论数': '5293', '平均个人消费': '47'}, {'商家名字': '淼鑫猪肚鸡(江夏店)', '商家地址': '白云区江夏东路3号尚龙大厦一楼(江夏地铁B出口旁,7天酒店旁)', '商家评分': '4.1', '商家评论数': '2997', '平均个人消费': '50'}], '荔湾': [], '黄埔': [{'商家名字': '牛香荟秘制牛杂', '商家地址': '黄埔区港湾路大沙地港湾西港湾大院(地铁站五号线大沙地站C出口正对面,中国建设银行侧面,遇见麽麽茶隔壁)', '商家评分': '4', '商家评论数': '3390', '平均个人消费': '46'}, {'商家名字': '杨国福麻辣烫(东区店)', '商家地址': '黄埔区东区时代城南门对面(华莱士隔壁)', '商家评分': '4', '商家评论数': '3142', '平均个人消费': '15'}], '增城': [], '花都': [], '从化': []}

总共19家,一家50,总共950,嘿嘿,吃完近千元,还是最低预算,想想就算了,肉疼,但是这些店里去过一家,确实不错。

for i in cxk.values():try:for j in i:print(j['商家名字'])except:continue傣妹火锅(光明广场店)
十里香牛杂煲(优创汇店)
二郎田鸡(黄村店)
满汉三汁焖锅(天娱广场店)
聚福猪肚鸡(车陂店)
黑山牛肉汤火锅(花城汇店)
一香一甜韩国年糕火锅(小长今韩国料理)
上上签串串香(时尚天河商业广场店)
重庆鸡公煲(车陂老店)
淼福猪肚鸡(长兴直营店)
淼福猪肚鸡(华侨城店)
南北和·自助火锅(番禺大石店)
煲煲哥·招牌奇味鸡煲(洛溪店)
汤响自助回转火锅百汇(乐峰广场店)
名扬煮艺肥牛自助火锅(花园路店)
名扬煮艺肥牛自助火锅(连元桥店)
淼鑫猪肚鸡(江夏店)
牛香荟秘制牛杂
杨国福麻辣烫(东区店)

后记

有心无力的操作,边分析边哭,是什么抑制了我的想象,是钱啊!!

这是一份价值上千的python数据分析实战相关推荐

  1. 分享一份60页的《Python数据分析入门PPT》

    小伙伴你好,资料会有的,我先做个自我介绍. 我是小詹.一名即将毕业的研究生,一个懂点技术和运营的产品人. 爱折腾爱分享,我在大学时通过副业实现了经济独立,偶尔还能补贴家用,在北漂求学的 7 年里还算精 ...

  2. 【Python】整理了上千个Python类库,简直太酷啦!

    Python 生态,向来以各种类库齐全而闻名,这也是这门语言如此受欢迎的重要原因.今天就给大家分享一下这几天的战果,宵衣旰食,不眠不休的整理了近千个 Python 库,收藏的同时,给个在看不为过吧! ...

  3. 一份点赞上千的《算法》讲义,来自20年教学经验的UIUC计算机教授

    晓查 发自 凹非寺  量子位 出品 | 公众号 QbitAI 一位从1998年就开始讲课的老教授Jeff Erickson,把他20年来在UIUC讲课的内容整理成了一本算法书,名字简单粗暴,就叫< ...

  4. python爬虫实例电商_价值上千元的Python爬虫外包案例,学会你就赚了

    前言 随着互联网时代的到来,人们更加倾向于互联网购物.某宝又是电商行业的巨头,在某宝平台中有很多商家数据. 今天带大家使用python+selenium工具获取这些公开的 适合人群: Python零基 ...

  5. Unity新手必备5款宝藏插件--价值上千元白嫖最新版

  6. java就业实战全套视频教程 价值上千

    下载地址:百度网盘​​​​​​​

  7. python如何并发上千个get_Python爬虫实战入门六:提高爬虫效率—并发爬取智联招聘...

    匿名说道: # coding:utf-8 import requests from bs4 import BeautifulSoup url = 'https://sou.zhaopin.com/jo ...

  8. 表情包:有本事来爬我啊,俺有上千条 python:来啦~

    前言 在如今这个人人配一台手机得时代,很多人聊天都是通过网上,但是,怎么样快速缓解尴尬进入快乐而愉快得聊天呢~ 刚认识的朋友丢几个表情包出去分分钟拉进关系,女朋友生闷气了整两个表情包开心一下,也可以化 ...

  9. 程序员必修内功,收集了上千本各类编程书籍【免费获取】

    程序员必修内功,收集了上千本各类编程书籍,C,C++,Java,Python,机器学习,深度学习,Linux等等,还收集了很多英文原版书籍,看不惯中文的也可以选择英文哦.这些书籍都是我经过平时的积累, ...

最新文章

  1. 源码推荐:基于uni-app前端框架,开源版本还开源免费商用
  2. wp config.php mysql_wordpress遇到错误“似乎 wp-config.php 文件不存在”的解决办法
  3. 太原工业学院单片机课程设计_我系举办2014年单片机应用技能竞赛开幕式
  4. 一步一步学Silverlight 2系列(5):实现简单的拖放功能
  5. 《计算机组成原理》课程设计报告——TEC-2实验系统——微程序设计
  6. 【C/C++13】天气APP:数据挖掘/HTTP协议/非结构化数据存储(filetoblob.cpp),数据管理/监控告警(hsmtable.cpp,tbspaceinfo.cpp)
  7. 适配器模式源码解析(jdk+spring+springjpa+springmvc)
  8. windows 仍在设置此设备的类配置。 (代码 56)_谷歌发布Flutter Alpha:支持Windows
  9. java责任链设计模式 订单_Java责任链设计模式实例分析
  10. python全栈开发笔记---------数据类型-----集合set
  11. 荣耀赵明反讽雷军:有些话不适合知识分子讲
  12. 讨论简书留言界面的设计
  13. 光伏补贴新政出台 投资机会解析
  14. 王招治计算机财务管理,计算机财务管理——以Excel为分析工具
  15. 【软考-软件设计师精华知识点笔记】考试大纲及题型介绍
  16. 写一份竞品分析文档的思路(模板)
  17. 杭州电子科技大学计算机非全日制,杭州电子科技大学全日制和非全日制研究生有何区别?...
  18. 电路中容易混淆的三角形符号
  19. UCOSIII总结------消息队列(6)
  20. spark Hash Shuffle内幕彻底解密

热门文章

  1. Node.js 初学者教程
  2. 他们是我的父母 我能怎么办?
  3. 解决创建Maven Project出现的项目报错问题
  4. rust 模块/文件/project
  5. 7-2 长度质量计量单位换算(分数 5)
  6. seneca mysql_seneca-entity的mysql插件自增主键
  7. 教你辨别专利编号| 专利的专利号申请号公开号公告号
  8. 你必须知道的 10 个元宇宙最佳案例
  9. Linux Socket编程入门——浅显易懂
  10. Effective C++ 条款34