Skip to content

Repository files navigation

知乎社交网络分析(历史 master 快照)

本分支保存 2015–2017 年课程项目代码与报告,不是当前知乎数据、可复现研究结论或 可公开发布的数据集。旧 crawler、旧分析脚本和两份报告均作为历史材料保留。

研究与发布边界

  • 原始数据库包含用户 URL、显示名、问题 ID、关注关系和话题活动等可识别信息。 本分支不再提供原始数据下载入口;在隐私、伦理、平台权利和数据许可得到明确的 人工决定前,不应重新传播原始或逐行派生数据。
  • 2015 项目报告演示文稿 是归档产物。报告中的“显著幂律”、相关性、热门话题和精英子图结论来自当年的 可视化/探索性方法,不能视为当前代码已验证的统计结论。
  • 仓库内没有 zhihu.db,也没有可证明报告数字的精确提交、依赖锁、运行清单或 本轮真实数据重跑。因此真实数据复现与发布仍是开放门槛。
  • 其他分支的实现、合成测试或历史运行结果不构成本 master 快照的测试证据。
  • 仓库没有数据许可证。不得从代码可见或字段曾公开推导出数据再发布授权。

代码与数据流

历史流程为:crawler/user.py 写用户、关注与回答问题的制表符文件, crawler/topic.py 写问题—话题文件,zhihu_database.py 在本地构建 SQLite, zhihu_analysis.py 再读取 UserFollowingUserTopic

当前边界如下:

  • crawler/:Python 2 时代的站点解析与登录代码,依赖失效页面结构并关闭 TLS 验证;不支持、不测试,也不应拿来重新抓取知乎。
  • zhihu_analysis.py:Python 2 / 旧 NetworkX 探索脚本,仅作归档。它没有现代 Python 或统计有效性保证。
  • zhihu_database.py:本分支唯一维护的 Python 3 工具,只处理已经合法取得并 私下保存的本地小型/历史 TSV;它不访问网络。
  • zhihu_schema.sql:重建数据库的初始化契约。

离线数据库重建契约

要求 Python 3.10+,不需要第三方依赖。输入目录必须同时包含以下 UTF-8 TSV:

路径模式 每行格式
data/user_* user_url, user_id, followee_num, follower_num, answer_num, agree_num, thanks_num, layer
data/followee_* user_url, followee_url...
data/question_* user_url, question_id...
data/topic/topic_* question_id, topic...

表中逗号仅表示字段顺序,实际分隔符均为 tab。请把原始输入和目标数据库放在仓库外 的私有目录;.gitignore 只是最后一道防误提交保护,不是访问控制。

python3 zhihu_database.py \
  --source /private/path/to/crawler-data \
  --db /private/path/to/zhihu.db

建库器会:

  1. 在打开目标前检查四组输入是否齐全;
  2. 严格校验字段数、整数和非负计数,并使用参数化 SQL;
  3. 接受完全相同的重复用户行,但拒绝同一用户的冲突画像;对重复关系使用唯一索引去重;
  4. UserQuestion JOIN Question 确定性生成分析所需的 UserTopic
  5. 要求五张表均非空并运行 SQLite integrity check;
  6. 聚合报告未抓取 followee 与缺少 topic 的回答关系,不用外键删除这些已知采样边界;
  7. 拒绝符号链接目标,只在完整成功后原子安装权限为 0600 的数据库,输出聚合行数、 源文件与 schema 的 SHA-256。

默认拒绝覆盖已有数据库。只有明确需要替换指定目标时才加 --replace;失败时旧目标 保持不变,临时数据库会被删除。

配置秘密边界

crawler/config.example.ini 只是一份空白历史格式示例。真实 crawler/config.ini、 cookie、验证码、数据库、crawler 输出、ZIP 和 Parquet 均被忽略,绝不能提交。 这不表示 crawler 获得支持,也不是登录或抓取指南。

离线验证

python3 -m unittest discover -s tests -v
python3 -m py_compile zhihu_database.py

测试只使用临时目录中的合成用户、关系、问题与话题,覆盖 TSV 契约、包含撇号的文本、 UserTopic 派生、SQLite 完整性、私有文件权限、冲突重复、错误信息不回显字段值、 非法编码、CLI 聚合输出、缺失输入、拒绝意外覆盖、失败原子性与敏感路径忽略规则。 新增的 CI 工作流配置为在 Python 3.10 与 3.12 上执行同一离线测试,不安装或调用 crawler/分析依赖;本轮没有把未运行的远端 CI 当作通过证据。

已知但未在本轮修复的历史风险

  • 当前 crawler 深度参数与报告中的“两层 BFS”表述不一致,并可能在持久连接错误上 无限重试;确认真实历史运行配置需要原始运行记录或数据,不能靠改代码追认。
  • crawler 输出以覆盖方式写文件、错误日志不是可恢复 checkpoint,topic 爬漏也已在 原 README 中承认。这些问题不能在不访问旧站点/真实数据的前提下闭环。
  • 旧分析会遗漏阈值子图中的孤立用户、直接对零计数取对数,并把可视化模式写成统计 结论;完整修复属于独立的现代分析流水线工作,不在本次 master 窄修复范围内。

About

Social Network Analysis of Zhihu with Python

Topics

Resources

Stars

265 stars

Watchers

23 watching

Forks

Releases

Packages

Contributors

Languages