图谱导航和链接分析手册
版本:v4(2026-10) 工具:
build_name_map4.py+link_checker4.py输出目录:8000/test/部署产物:8000/nav.html
一、整体流程
① 规范 HTML 的 <title>
↓
② python build_name_map4.py (抽 title,建中文名表)
↓
③ python link_checker4.py (生成两份图谱)
↓
④ 双击 test/link_graph_nav4.html (本地测试)
↓
⑤ 满意后复制到 8000/nav.html (部署)
二、目录结构
8000/
├── build_name_map4.py ← 建表脚本
├── link_checker4.py ← 生成图谱脚本
├── d3.v7.min.js ← D3 源文件(被内嵌)
├── index.html ← 你的站点首页
├── nav.html ← 部署产物(图谱导航)
├── wq/ ICTC/ ncg/ ... ← 你的站点内容
│
├── _reports/ ← 旧版产物(保留,不用)
│
└── test/ ← 新版产物目录(自动创建)
├── name_map4.csv ← 中文名对照表(可手工维护)
├── name_map4.json ← 自动生成,py 读取用
├── name_map_report4.txt ← 质量报告
├── link_graph_nav4.html ← 导航版(双击能跑)
├── link_graph_analysis4.html ← 分析版
└── report_nav4.txt ← 链接问题报告
三、<title> 规范
格式
<title>名称 - 牛春国个人主页</title>
<title>名称 | 牛春国个人主页</title>
- 分隔符:
-(空格-连字符-空格)或|(空格-竖线-空格) - 前后必须有空格
名称部分是你想在图谱上显示的中文名- 后半部分统一为站点名
示例
| 页面 | <title> |
|---|---|
| 首页 | <title>牛春国个人主页</title> |
| 维权导航 | <title>维权 - 牛春国个人主页</title> |
| 维权某页 | <title>局戴尔维权总体工作路线图 - 牛春国个人主页</title> |
| 技术导航 | <title>技术 - 牛春国个人主页</title> |
| 含连字符的名称 | <title>dell-成就7510主板问题 - 牛春国个人主页</title> |
关键点
- 名称里可以有
-(无空格),不会被误切 - 名称里尽量别有
-或|(带空格),否则会被切成两段 - 没写分隔符 → 整个
<title>就是名称
四、日常操作
场景 1:新增页面
- 写 HTML,规范
<title> - 跑:
cd C:\Users\niuch\Documents\8000
python build_name_map4.py
python link_checker4.py
- 双击
test/link_graph_nav4.html看效果
场景 2:改了某个页面的 <title>
同上,跑两个脚本即可。不用手工改 CSV(因为 manual=no 时自动重新抽取)。
场景 3:某个页面不想改 <title>,但想在图谱上显示别的名字
- 打开
test/name_map4.csv - 找到该行,改
chinese_name列 - 把
manual列改成yes - 保存(保持 UTF-8 BOM 编码)
- 跑
python build_name_map4.py(同步到 JSON) - 跑
python link_checker4.py
注意:manual=yes 的行,以后重跑不会被 <title> 覆盖,但 title 列也不会更新。
场景 4:批量检查 title 质量
跑完 build_name_map4.py 后,看 test/name_map_report4.txt:
- 无 title 的文件:需要补
<title> - title 为通用标题的文件:含"牛春国"、"个人站点"等关键词,可能是首页或漏改
- 已删除的文件:CSV 里保留但文件已删,可手工清理
- 手工维护的文件:
manual=yes的行
五、两个版本的区别
| 特性 | nav 版 | analysis 版 |
|---|---|---|
| 用途 | 日常导航,部署到站点 | 排查问题,放本地 |
| 文件名 | link_graph_nav4.html |
link_graph_analysis4.html |
| D3 | 内嵌 | 内嵌 |
| 断链节点 | 不显示 | 显示(可开关) |
| 空链节点 | 不显示 | 显示(可开关) |
| 孤本节点 | 不显示 | 显示(可开关) |
| 问题筛选下拉框 | 无 | 有 |
| 默认视图 | 正常结构 | 正常 + 问题高亮 |
六、交互功能
左侧面板
| 控件 | 作用 |
|---|---|
| 显示文件名 | 节点旁显示 l3-2.html |
| 显示中文名 | 节点旁显示 局戴尔维权总体工作路线图 |
| 显示超链接 | 节点旁显示 wq/l3-2.html(路径) |
| 打开超链接 | 勾选后点击节点直接打开页面 |
| 仅显示有中文名 | 过滤掉没有中文名的节点 |
| 显示断链/空链/孤本 | 仅 analysis 版,控制问题节点显示 |
| 问题筛选 | 仅 analysis 版,只看某类问题 |
| 单元筛选 | 只看个人/技术/维权/孙子等 |
| 搜索框 | 按文件名或中文名搜索 |
| 返回初始视图 | 重置缩放和过滤 |
注意:文件名和中文名互斥(开一个自动关另一个)。超链接独立。
节点交互
| 操作 | 效果 |
|---|---|
| 悬停 | 显示 tooltip(文件名、中文名、路径、状态、度数) |
| 单击 | 隐藏其他,只留它 + 一跳邻居 |
| 单击空白 | 恢复全图 |
| 拖拽 | 移动节点位置 |
| 滚轮 | 缩放 |
| 拖动空白 | 平移 |
七、配色规则
节点颜色
| 角色 | 颜色 | 形状 |
|---|---|---|
总导航 index.html |
亮黄 #ffd60a |
五角星(大) |
| 个人 ncg/sh/huiyilu/xianhuashenghuo | 咖啡 #632000 |
圆 |
| 技术 ICTC/tixi/jishu/my-store | 灰 #2c2c2c |
圆 |
| 维权 wq | 蓝 #1A497A |
圆 |
| 孙子 njr | 绿 #1d6f06 |
圆 |
| 其他 | 灰 #888888 |
圆 |
| 断链(analysis) | 红 #ff2d55 |
圆 |
| 空链(analysis) | 紫 #bf5af2 |
圆 |
| 孤本(analysis) | 灰白空心 #dddddd |
圆 |
其他
- 背景:紫
#7f1cad - 连线:白
#ffffff,宽度 0.85 - 节点描边:白,根 2.5px,目录入口 2px,普通 1.2px
八、过滤规则
边的保留条件
一条边 A → B 保留,当且仅当:
B后缀是.html/.md/.pdfA和B同目录,或A是index.htmlA是index.html时,B必须是目录入口(*/nav.html或*/index.html)- 深度差 ≤ 1
效果
| 边 | 保留? |
|---|---|
index.html → wq/nav.html |
✅ |
index.html → wq/l3-2.html |
❌ 跨级 |
wq/nav.html → wq/l3-2.html |
✅ 同目录 |
wq/l3-2.html → wq/jubaoshu.html |
✅ 同目录 |
wq/l3-2.html → ICTC/tools.html |
❌ 跨目录 |
被过滤的链接
bigsize/目录下的链接njr/photo/yey、njr/video/s0、njr/video/_前缀- 图片、视频等多媒体(不画边)
九、部署流程
本地测试
cd C:\Users\niuch\Documents\8000
python build_name_map4.py
python link_checker4.py
双击 test/link_graph_nav4.html 测试。
此时节点链接失效(因为 test/ 下没有 wq/ 等子目录),这是预期的。测试时主要看结构、配色、开关。
部署
copy 8000\test\link_graph_nav4.html 8000\nav.html
(或你习惯的其他名字)
上传到服务器后:
- D3:
d3.v7.min.js已内嵌,不依赖外部 - 节点链接:以
8000/为根,正常访问
部署后验证
浏览器打开 https://你的域名/nav.html:
- 图谱能显示
- 节点点击能打开页面
- 中文名开关正常
十、脚本配置
build_name_map4.py
SITE_ROOT = Path(r"C:\Users\niuch\Documents\8000")
OUTPUT_DIRNAME = "test"
link_checker4.py
SITE_ROOT = Path(r"C:\Users\niuch\Documents\8000")
OUTPUT_DIRNAME = "test"
D3_PATH = SITE_ROOT / "d3.v7.min.js"
常用配置项
# title 分隔符(抽取时取前面部分)
TITLE_SEPARATORS = [" - ", " – ", " — ", " | ", "|", "·", "-", "–", "—"]
# 过滤的目录
EXCLUDE_DIRNAMES = {"bigsize", "_gsdata_", "_reports", ..., "test"}
# 过滤的目标前缀
BLOCK_PREFIX = ["bigsize/", "njr/photo/yey", "njr/video/s0", "njr/video/_"]
# 单元定义(配色用)
UNIT_DIRS = {
"personal": ["ncg", "sh", "huiyilu", "xianhuashenghuo"],
"tech": ["ICTC", "tixi", "jishu", "my-store"],
"wq": ["wq"],
"njr": ["njr"],
}
十一、常见问题
Q1:中文名没显示
检查:
test/name_map4.json存在吗?- 里面有你想要的条目吗?
- HTML 里勾了"显示中文名"吗?(和"显示文件名"互斥)
Q2:图谱是鸟窝
- 看 nav 版(
link_graph_nav4.html),不是 analysis 版 - nav 版过滤严格,不会鸟窝
- analysis 版本就是"全图",正常
Q3:双击 HTML 打不开
- D3 已内嵌,应该能打开
- 如果还是不行,看浏览器控制台报错
Q4:节点链接失效
- 测试时在
test/下,链接以test/为根,正常失效 - 部署到
8000/根目录后就正常
Q5:改了 CSV 没生效
- 检查
manual列是否改成yes - 检查 CSV 保存编码是否是 UTF-8 BOM
- 重跑
python build_name_map4.py(同步到 JSON) - 重跑
python link_checker4.py
Q6:某个文件被误判为断链
- 看
test/report_nav4.txt的断链列表 - 检查目标文件是否存在、路径大小写是否正确
- 检查是否是查询参数(
?file=xxx)导致的
Q7:想改配色
改 link_checker4.py 里的 UNIT_COLORS、COLOR_ROOT_STAR 等常量。
Q8:想改过滤规则
改 link_checker4.py 里的 link_allowed_py 函数。
十二、快捷命令
# 进入工作目录
cd C:\Users\niuch\Documents\8000
# 建表
python build_name_map4.py
# 生成图谱
python link_checker4.py
# 一条命令搞定
python build_name_map4.py && python link_checker4.py
十三、文件清单
| 文件 | 作用 | 手工改? |
|---|---|---|
build_name_map4.py |
建中文名表 | 可改配置 |
link_checker4.py |
生成图谱 HTML | 可改配置/模板 |
d3.v7.min.js |
D3 源文件 | 不动 |
test/name_map4.csv |
中文名表 | ✅ 常改 |
test/name_map4.json |
py 读取用 | ❌ 自动生成 |
test/name_map_report4.txt |
质量报告 | 只看 |
test/link_graph_nav4.html |
导航版 | ❌ 自动生成 |
test/link_graph_analysis4.html |
分析版 | ❌ 自动生成 |
test/report_nav4.txt |
链接问题报告 | 只看 |
十四、工作原则
- 规范
<title>是根本,manual列尽量不用 - 每改一批内容,重跑两个脚本,图谱自动更新
- nav 版部署,analysis 版本地诊断,两者互补
- 发现问题先看 report,再决定改 HTML 还是改配置
- 测试产物在
test/,部署产物在8000/,互不干扰
手册结束。有疑问随时问。