第一章 绪论
1.开发环境
windows-x64位,pycharm,python3.8
2.基本功能介绍
本次可视化页面的制作主要有三步,web服务器页面的制作,爬取页面的国家和GDP数据和将数据进行可视化页面,web服务器页面的制作主要是FastAPI框架,爬取页面上的数据主要采用requests模块和re模块,而数据可视化主要是用pyecharts模块进行导入相应形状的表格。本次实训利用四天时间学到的内容,实用性强,自己平时也能够操作和扩展。
第二章 系统设计
2.1 浏览器访问web服务器的通讯流程
*浏览器访问Web服务器的通讯流程:
- 浏览器 (127.0.0.1/index.html) ==> 向Web服务器请求index.html
- Web服务器 (返回index.html) ==> 浏览器
- 浏览器解析index.html发现需要0.jpg ==>发送请求给 Web服务器请求0.jpg
- Web服务器 收到请求返回0.jpg ==> 浏览器 接受0.jpg*
第三章 系统实现
3.1 web服务器的制作
#首先从fastapi模块中导入FastAPI和相应报文Response和导入服务器uvicorn。
from fastapi import FastAPI
from fastapi import Response
import uvicorn
#创建FastAPI框架对象。
app = FastAPI()
#通过@app路由器装饰器进行收发数据和按照get方式进行请求数据,其中/{path}为资源的url任意路径。
@app.get("/{path}")
def get_html(path: str):#路径为str格式
with open(f"./html/{path}"#打开/html下面的文件,"rb"#二进制的方式读取) as f:
data = f.read()
#return返回相应数据
return Response(content=data, media_type="text/html"#返回的格式)
#同上面一部分相似
@app.get("/images/{path}")
def get_image(path: str):
with open(f"./images/{path}", "rb") as f:
data = f.read()
return Response(content=data, media_type="jpg")
#运行服务器使用uvicorn进行,框架对象为app,host为ip地址,port为端口号
uvicorn.run(app, host="127.0.0.1", port=8082)
3.2 爬取页面上的GDP数据
import re #re为正则表达式的模块
import requests
#存储爬取到的国家名字
gdp_list = []
# 存储国家名字的列表
country_list = []
# 向网站发出请求 网站会返回给我一个html代码对象
data = requests.get("http://127.0.0.1:8082/gdp.html")
# 获取具体的数据
data = data.content.decode("utf8")
# 对gdp.html进行解析
data_list = data.split("\n")
# 匹配响应的数据
for i in data_list:
ret1 = re.match('.*<a href=""><font>(.*)</font></a>', i)
if ret1:
country = ret1.group(1)#第一个括号中数据
country_list.append(country)
ret2 = re.match('.*<font>¥(.*)亿元</font>', i)
if ret2:
gdp = ret2.group(1)
gdp_list.append(gdp)
# 通过zip方法转化我们的列表数据,将两个列表融合为一个列表
result = list(zip(country_list, gdp_list))
print(result)
3.3数据可视化
# 创建一个饼状图显示GDP前十的国家
def data_view_pie():
# 获取前十的过的GDP数据, 同时让数据符合[(),()...]的形式
data = list(zip(country_list[:10], gdp_list[:10]))
# 创建饼图
pie = Pie(init_opts=opts.InitOpts(width="1400px", height="800px"))
# 给饼图添加数据
pie.add(
"GDP",
data,
label_opts=opts.LabelOpts(formatter='{b}:{d}%')
)
# 给饼图设置标题
pie.set_global_opts(title_opts=opts.TitleOpts(title="许俊博"))
# 保存结果
pie.render()
if __name__ == '__main__':
# 获取GDP数据
get_gdp_data()
# 生成可视化饼图
data_view_pie()
第四章 系统测试和评价
4.1创建web服务器
4.2爬取相关国家的GDP
4.3进行数据可视化处理