0%

知乎话题树抓取&可视化

爬虫部分


跟话题为入口解析完整话题树并获取每个话题的话题名称、话题ID、关注人数、父话题名称、父话题ID以文件形式保存

知乎话题的URL为https://www.zhihu.com/topic/话题ID/organize/entire

一个用户可关注多个话题

程序语言


Python

依赖项

  • pyquery
  • urllib2

程序工作流程


  1. 手动获取根话题ID作为程序执行入口
  2. 根据话题ID获取该话题页面数据并从待抓取队列中删除该话题
  3. 解析该页面的话题名称、话题ID、关注人数、父话题名称、父话题ID以文件形式记录同时压入已抓取队列
  4. 获取该话题的子话题ID并压入待抓取队列
  5. 判断子话题是否获取完毕未完毕则返回步骤3
  6. 判断待抓取队列是否为空若不为空返回步骤1
  7. 执行完毕

2017/07/12程序执行结果


数据说明

topicName topicID focusValue parentName parentID
话题名称 话题ID 话题关注人数 父话题名称 父话题ID

基本信息

话题个数 数据条数 总关注人数 话题平均关注人数 80%关注量所需话题个数 关注人数最多的话题
35963 57396 1147085961 31896.28 546 (1.5%) 电影(人数:16926383)

可视化部分

程序语言


JavaScript

依赖项

  • d3.js(V3)

一、各话题关注量气泡图

ZHTTVis-1
以气泡图的形式展示各个话题的关注量

图片分辨率为4728*4960大小为5.37M放大可查看细节(服务器1兆的小水管加载可能比较耗时)

二、可展开式话题树

ZHTTVis-2
点击节点可折叠或展开该话题用于探查整个话题树

演示地址 (加载数据文件耗时严重)

三、话题树旭日图

旭日图(sunburst),也称为太阳图,一种圆环镶接图,每一个圆环就代表了同一级别的比例数据,离原点越近的圆环级别越高,最内层的圆表示层次结构的顶级。除了圆环外,旭日图还有若干从原点放射出去的‘射线’,这些‘射线’展示出了不同级别数据间的脉络关系。

ZHTTVis-3
ZHTTVis-4
ZHTTVis-5
对关注量数据由叶子节点向根节点求和,每个节点的值为该节点的关注量以及所有的子节点的关注量之和。以圆弧的弧度的弧度作为映射展示该话题在同一级别下所占的比例。点击不同的圆弧可将该话题移至第二级,第一级为该话题的父话题以此为交互方式展示整个话题树

演示地址 (加载数据文件耗时严重)

四、话题树图

ZHTTVis-6
展示整个话题树的脉络。线条的宽度代表关注量。鼠标覆盖可对该条枝干加粗并标注节点名称。

2019-4-11更新


数据及源码

鉴于有部分同学需要源码和数据这里临时整理至github,各位同学star后取需:)
可视化部分连接: github
爬虫部分连接: github

共同参与

由于项目开发时间较早,可能并不十分成熟,欢迎感兴趣的同学在取得数据和源码后共同参与,共同努力,使程序更规范、更效率、更美观。

参考&引用

http://blog.sina.com.cn/s/blog_49f78a4b0102wg92.html
http://www.nytimes.com/interactive/2012/11/02/us/politics/paths-to-the-white-house.html
http://blog.csdn.net/tianxuzhang/article/details/14170243