本文章主要阐述爬取大众点评下某超市在全国各地的数据,并且进行数据处理,最后使用flask实现可视化大屏展示
最终结果如下:
大众点评的数据文本使用SVG文字映射反爬虫措施 这边就不具体叙述,有想了解的网页们可以通过以下链接进行学习
大众点评爬虫(如侵立删)
最终爬取数据展示:
因为有些大众点评下的超市的数据为Nan值 这边使用fillna进行填充 填充为0.
根据地区进行分组聚合,使用mean函数 求出平均数
import pandas as pd
import csv
#有Nan值空行的数据 需要填充为0
def write_csv():
with open('total.csv', 'w', encoding='gbk', newline='') as f: # 创建了个文件 作为f
title = list[0].keys()
writer = csv.DictWriter(f, title)
writer.writeheader()
writer.writerows(list)
print("写入成功")
data = pd.read_csv("data/最终详情页.csv", encoding = "utf-8")
new = data.loc[data["服务"].isin([0])].index
test = data.drop(new)
a = pd.Series(test.groupby("地区")["服务"].mean()).round(2)
new1 = data.loc[data["人均"].isin([0])].index
test1 = data.drop(new1)
b = pd.Series(test1.groupby("地区")["人均"].mean()).round(2)
c = pd.Series(data.groupby("地区").size())
# print(c)
k = pd.concat([c, b, a], axis = 1, join = "outer", ignore_index =True)
k.rename(columns={0:'数量',1:'人均', 2:"服务"},inplace=True)
k.fillna(0, inplace=True)
list = []
df = {}
df["数量"] = k["数量"].sum()
df["人均"] = k["人均"].mean().round(2)
df["服务"] = k["服务"].mean().round(2)
list.append(df)
write_csv()
k.to_csv("data.csv")
print("保存成功")
结果展示:
网页展示数据的处理
# -*-coding:utf8 -*-
import pandas as pd
data = pd.read_csv("../data/data.csv", encoding="utf-8")
def get_cost1():#处理各地区之间对应的人均消费数据
new = data.loc[data["人均"].isin([0])].index#找出人均为0的序列号
test = data.drop(new)#删除
list1 = list(test["地区"])#返回数据给flask
list2 = list(test["人均"])#返回数据给flask
return list1, list2
def service():#处理各地区之间对应的服务态度数据
new = data.loc[data["服务"].isin([0])].index
test = data.drop(new)
list1 = list(test["地区"])
list2 = list(test["服务"])
return list1, list2
def top():#获取全国数量排名前5的城市名称
data.sort_values(by=['数量'], ascending=False,inplace = True)#按照数量进行排名
list1 = list(data["地区"].head(5))#取出排名为前5的城市
list2 = list(data["数量"].head(5))#排名为前5对应的数量
return list1, list2
def map():#将地区和数量一一对应写成字典的格式
list = []
for i, r in data.iterrows():
list.append({"name":r["地区"], "value":r["数量"]})
return list
def get_title():#因为total.csv就以经是最终数据了 只要读取那一列数据即可
df = pd.read_csv("../data/total.csv", encoding = "gbk")
list1 = df["数量"][0]
list2 = df["人均"][0]
list3 = df["服务"][0]
return list1, list2, list3
flask调用展示
#全国超市连锁系统
from flask import Flask
from flask import render_template
import pandas as pd
import LL
app = Flask(__name__)#创建实列
@app.route("/")
def new_de1():
a = LL.get_title()
context = {
'test1':a[0],
'test2':a[1],
'test3':a[2],
}
#返回模板
return render_template('index.html', data=LL.get_cost1(), data2=LL.service(), data3=LL.top(),**context, data4 = LL.map())
# return render_template("index.html", data = data, data2 = data)#导入网页
if __name__ == '__main__':
app.run()#运行
完整代码获取
链接:https://pan.baidu.com/s/1_03ltwD1kdFwhSvkOyvtLg
提取码:qfh1
感谢观看



