本实战项目通过python爬取豆瓣电影Top250榜单,利用flask框架
和Echarts
图表分析评分、上映年份并将结果可视化,并制作了词云,项目已经上传至服务器,欢迎各位大佬批评指正。
项目展示:http://121.36.81.197:5000/
源码地址:https://github.com/lzz110/douban_movies_top250
学习资料:Python爬虫技术5天速成(2020全新合集)
项目技术栈:Flask框架、Echarts、WordCloud、SQLite
环境:Python3
上一章已经对数据进行分析和可视化,这一章将项目部署到服务器上,方便查看。
服务器:华为云鲲鹏服务器
系统:Ubuntu18.04 Server
Python:Python3.6.7
pip:pip 19.1.1
uwsgi:2.0.18
Nginx: 1.14.0
步骤主要参考博客:Flask部署华为鲲鹏云服务器
注意一: 生成requirements.txt文件
在本地项目 Terminal 命令行下输入命令后,同级目录下就会生成requirements.txt文件了
pip freeze > requirements.txt
注意二: 云服务器需要开放对应的安全组
开放对应端口之后,可以通过服务器中的nginx进行测试 在浏览器中输入公网ip后 浏览器会展示如下页面:
注意三: Nginx+UWSGI配置问题
uWSGI是一个由python实现的web容器,可以兼容性比较好地发布Django,Flask等pythonweb框架的应用。因为本质上来说uwsgi是python的一个模块,所以可以用pip install uwsgi直接来安装它。
一个典型的配置文件如下:
[uwsgi]
socket = 127.0.0.1:5000
pythonpath = /home/wyz/flask
module = manage
wsgi-file = /home/wyz/flask/manage.py
callable = app
processes = 4
threads = 2
daemonize = /home/wyz/flask/server.log
依次解释一下这些配置项。socket指出了一个套接字,相当于为外界留出一个uwsgi服务器的接口。需要注意的是,socket不等于http。换句话说用这个配置起来的uwsgi服务器是无法直接通过http请求成功访问的。
关于socket和http的差别 从概念上来说,socket本身不是协议而是一种具体的TCP/IP实现方式,而HTTP是一种协议且基于TCP/IP。
具体到这个配置这里来,如果我只配了socket = 127.0.0.1:5000
的话,通过浏览器或者其他HTTP手段是无法成功访问的。而在uwsgi这边的日志里会提示请求包的长度超过了最大固定长度。
另一方面,如果配置的是http = 127.0.0.1:5000
的话,那么就可以直接通过一般的http手段来访问到目标。但这会引起nginx无法正常工作。正确的做法应该是,如果有nginx在uwsgi之前作为代理的话应该配socket,而如果想让请求直接甩给uwsgi的话那么就要配http。
注意四: 使用nohup 后台运行程序后 不能直接关闭MobaXterm ,需要等待自己断开连接,如果直接关闭 程序就不在后台运行了 很迷……
参考博文: