玩點好玩的--知乎全部話題關係可視化(Docker+Flask+Bootstrap+echarts+uWSGI+Nginx)

說明:大家不要嘗試搜索過於頂層的話題,比如「根話題」,「學科」等,會造成伺服器阻塞超時。如果打開時候顯示error頁面,可以嘗試過幾分鐘再打開試試。如果請求數據提示「請求數據失敗」,可能是資料庫掛了,給我留言,我會重啟一下。伺服器配置有點低,大家見諒!

網站訪問地址:http://59.110.49.40/。先看效果,下圖是以「數據」為根的話題關係可視化。

網站訪問地址:http://59.110.49.40/。這裡建議使用電腦訪問,手機訪問時布局有問題。由於域名沒有備案,先用ip進行訪問吧。右上角有個搜索框,可以對自己喜歡的話題關係進行搜索。由於伺服器配置不高,也為了更好的展示效果,不建議搜索過於頂層的話題。

比如搜索「周杰倫」:

比如搜索「Python」:

又比如搜索「蘋果公司」(比較亂,可進行縮放和拖拽):

============================= 分割線 ================================

項目步驟:

(1)通過爬蟲爬取知乎全部話題,包括topic_id,topic_name,topic_parentid等欄位。除了未分類話題外,其餘話題共有15萬+。注意,一個topic的子topic和父topic都有多個。

(2)利用Flask + Bootstrap + echarts進行數據可視化。選取的是echarts中的關係圖中的力引導圖。官網地址:echarts.baidu.com/demo.

(3)在阿里雲伺服器上,利用Docker部署Flask服務。用到的是官方建議的uWSGI+Nginx。

在這三步中,第一步和第二步不詳細寫步驟了。本文主要記錄下如何利用Docker在Centos系統下部署Flask服務。用到的工具是uWSGI+Nginx。關於Docker的基礎知識,可查看專欄文章:一小時入門Docker。下邊講的步驟也比較粗略,主要講幾個關鍵的配置文件等,見諒!

(1)首先利用Centos鏡像,新建一個容器myshow,這裡這裡需要開放80埠。

docker run -it --name myshow -p 80:80 centos:latest /bin/bashn

(2)在容器中安裝Python環境。由於用了Docker,這裡不再使用虛擬環境,而是直接裝進全局中。需要安裝的第三方包有:Flask、Flask-Bootstrap、Flask-WTF、uWSGI、PyMySQL等。建議使用requirements.txt安裝,比較簡單。

(3)利用uWSGI啟動自己的Flask程序,這裡假設你的Flask程序已經經過測試了。

uwsgi -s /tmp/uwsgi.sock -w MyShow:app --chmod-socket=666n

這裡的--chmod-socket=666,是將/tmp/uwsgi.sock的許可權設置為666,防止因為許可權問題而使得Nginx訪問受限。

(4)安裝Nginx,不同的系統有不同的安裝辦法,官網說明:nginx.install。安裝完成之後,輸入Nginx即可將服務打開。此時利用瀏覽器訪問ip地址,即可看到Nginx的歡迎頁面。修改Nginx配置文件,以鏈接uWSGI,配置文件地址:/etc/nginx/conf.d/default.conf:

server {n listen 80;n server_name xxx.com;nn charset utf-8;nn location / {n include uwsgi_params;n uwsgi_pass unix:/tmp/uwsgi.sock;n }n

很簡單。修改之後nginx -s reload即可使配置文件生效。這裡需要說明,不建議修改默認的listen埠。因為如果你有一個域名,比如a.com,你想綁定到你的這個Flask服務,域名解析時只填寫ip地址,埠默認映射到80埠。

下一步設想:再次利用爬蟲爬取各個話題的關注人數,歸一化後設置為圖中點的大小,即關注人數越多的話題,圓圈越大。如果你有關於這方面好的想法,也可以在評論中提出來。

=============================================================

作者主頁:笑虎(Python愛好者,關注爬蟲、數據分析、數據挖掘、數據可視化等)

作者專欄主頁:擼代碼,學知識 - 知乎專欄

作者GitHub主頁:擼代碼,學知識 - GitHub

歡迎大家拍磚、提意見。相互交流,共同進步!

==============================================================


推薦閱讀:

Python安全工具開發(一) :分散式爬蟲初探
跟黃哥學python序列文章之python二分查找演算法
Scrapy爬圖片(二)

TAG:Python | 知乎 | 数据分析 |