基于Python+Flask+Echarts的 COVID-19数据可视化项目
完整代码见 github 步骤 Python网络爬虫 使用Python与MySQL数据库交互 使用Flask构建web项目 基于Echarts数据可视化展示 在Linux上部署web项目及爬虫 项目环境 Python 3.7 MySQL 8.0.17 Flask 1.1.1 Linux上: 阿里云 CentOS 8.0 64位 Python3.6 MySQL 8.0 IDE pycharm/vscode/sublime
10、项目部署 开发模式部署 开发模式就是专门用来做程序调试用的 将之前ec_certer.js, ec_left1.js, main.html 等文件中的预设的值都清掉 之前的123和时间也给清掉 检查是否清空的方法是打开main.html,看是否图表里还有数据 这样就好了 再给controller.js里面添加定时循环更新 开发模式修改app.py的运行端口为0.0.0.0 if __name__=="__main__": app.run(host="0.0.0.0") 0.0.0.0就是不限制任何ip地址 部署的阿里云主机上的python是3.6,我们开发时是3.7 运行的时候会有一点点小问题 app.py @app.route(c1) 改动前 改动后 生产模式部署 正向代理&反向代理 正向代理 正向代理就是例如fq,通过代理服务器访问某个网站资源 我访问google,先发请求给代理,代理把我想要获取的数据的请求发给google;google根据请求返回数据给代理,代理再返回给我。但给我们的感觉像是我直接访问了google 对于google而言,所有使用同一个代理的人,它不知道是谁真正在访问它,它只知道是这个代理 即正向代理隐藏发起请求的人 反向代理 例如访问百度,域名www.baidu.com, 你也访问百度,他也访问百度,这个时候由于访问的人数很多,百度如果只用一台服务器来提供服务就可能扛不住这波压力。 它就可以采用反向代理的方式,我们都通过访问同一个网关,网关可以判断每一个人访问的权重值,根据权重值把你的请求发给第一台服务器,我的请求发给第二台,他的请求发给第三台。此时在我们看来我们都访问了同一个地址,但是在服务器内部其实已经分流到了不同的电脑之上。这也就是负载均衡 可以使用nginx作反向代理的网关实现负载均衡。 步骤: 在阿里云购买学生机,centos8.0 64位(自带了python3.6) 安装mysql, 参考,本来想装5.7,结果装了8.0 修改了app.py 安装python相关库 pip3 install flask pip3 install jieba pip3 install pymysql pip3 install selenium pip3 install gunicorn yum install nginx 编辑nginx配置文件 在这里添加 启动nginx /usr/sbin/nginx 来到Covid-19 Tracking的目录下,运行 gunicorn -b 127.0.0.1:8080 -D app:app -D是以守护进程的形式启动,以后台形式启动,不会挂在前端 此时从其他电脑访问访问可能还不成功,但是阿里云安全组也已经配置了8080端口了 原因是我们开启了防火墙,防火墙还没设置开放8080端口 两条命令 firewall-cmd --zone=public --add-port=80/tcp --permanent systemctl restart firewalld.service 之后打开就可以从其他电脑正常访问了 因为之前并没有往数据库里写数据,所以都是空的 部署定时爬虫 首先要安装selenium用到的chromedriver 安装chrome就是 yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 查看linux chrome的版本 google-chrome --version 我是根据chrome的版本在本机下载后上传到云主机的 之后就可以了 来到COVID-19 Tracking目录下 python3 spider.py up_his python3 spider.py up_det python3 spider.py up_hot 数据库就会有数据了 crontab -e 会弹出一个文件,在里面输入你的命令 意思是: 每小时的第30分钟执行一次这个脚本 每两小时的第3分钟 每30分钟执行一次这个脚本 2>&1是将标准错误重定向到标准输出 &是后台执行 之后输入crontab -l 查看任务列表 成功 之后服务器会定时执行脚本 至此,项目完结! 其实我觉得应该每次写入数据前先清空之前的数据表的,但既然视频上没有这样操作,也就先不改了。要想改也不难
参考视频:
