本實戰項目通過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 ,需要等待自己斷開連接,如果直接關閉 程序就不在後台運行了 很迷……
參考博文: