说明:大家不要尝试搜索过于顶层的话题,比如“根话题”,“学科”,“产业”等,会造成服务器阻塞超时。如果打开时候显示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中的关系图中的力引导图。官网地址:http://echarts.baidu.com/demo.html#graph-force
(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/bash
(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=666
这里的--chmod-socket=666,是将/tmp/uwsgi.sock的权限设置为666,防止因为权限问题而使得Nginx访问受限。
(4)安装Nginx,不同的系统有不同的安装办法,官网说明:nginx.install。安装完成之后,输入Nginx即可将服务打开。此时利用浏览器访问ip地址,即可看到Nginx的欢迎页面。修改Nginx配置文件,以链接uWSGI,配置文件地址:/etc/nginx/conf.d/default.conf:
server {
listen 80;
server_name xxx.com;
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
很简单。修改之后nginx -s reload即可使配置文件生效。这里需要说明,不建议修改默认的listen端口。因为如果你有一个域名,比如http://a.com,你想绑定到你的这个Flask服务,域名解析时只填写ip地址,端口默认映射到80端口。
下一步设想:再次利用爬虫爬取各个话题的关注人数,归一化后设置为图中点的大小,即关注人数越多的话题,圆圈越大。如果你有关于这方面好的想法,也可以在评论中提出来。
=============================================================
作者主页:笑虎(Python爱好者,关注爬虫、数据分析、数据挖掘、数据可视化等)
作者专栏主页:撸代码,学知识 - 知乎专栏
作者GitHub主页:撸代码,学知识 - GitHub
欢迎大家拍砖、提意见。相互交流,共同进步!
==============================================================