This repository has been archived on 2026-08-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
kb-skills/.planning/debug/resolved/zhihu-article-images-missing.md
T

82 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
status: resolved
trigger: "知乎文章处理时图片链接丢失"
created: 2026-03-15T00:00:00Z
updated: 2026-03-16T00:00:03Z
---
## Current Focus
hypothesis: 图片重复是因为知乎 HTML 包含 <noscript> 标签 - 已确认并修复
test: 已添加 test_noscript_images_not_duplicated 测试
expecting: 用户验证实际知乎链接处理
next_action: 等待用户验证
## Resolution
root_cause: |
问题1 (已修复): 知乎使用图片懒加载机制,`<img>` 标签的 `src` 属性包含 SVG 占位符(`data:image/svg+xml;...`),真实图片 URL 存储在 `data-actualsrc` 属性中。
问题2 (本次修复): 知乎 HTML 结构包含 `<noscript>` 标签作为备用,里面有相同的真实图片 URL。修复懒加载后,外层 img 和 noscript 内的 img 都有真实 URL,导致图片重复出现两次。
fix: |
修改 `markdown_converter.py` 的 `_fix_lazy_load_images` 方法:
1. 在处理 img 标签之前,先移除所有 `<noscript>` 标签
2. 这样只保留懒加载的主图片,避免重复
verification: 单元测试全部通过(13/13),包括新的 noscript 重复测试
files_changed: [kb-zhihu-metadata/markdown_converter.py, tests/test_zhihu_metadata/test_markdown_converter.py]
## Symptoms
expected: 当分析知乎文章时,原文部分的图片链接应该保留在 markdown 中,用户可以在 markdown 中看到图片链接
actual: 文字内容正确,图片无法看到,最后归档的分析内容中完全没有图片或者图片链接
errors: 无显式错误,命令执行成功但图片丢失
reproduction: 运行一键 CLI 命令处理知乎链接:https://www.zhihu.com/question/1936375725931361485/answer/2003232153480226496
started: 第一次出现,可能是功能从未正确实现
## Eliminated
<!-- APPEND only -->
## Evidence
- timestamp: 2026-03-15T00:00:00Z
checked: markdown_converter.py 的图片转换
found: markdownify 正确转换 `<img>` 标签为 Markdown 格式 `![](url)`
implication: Markdown 转换器工作正常,问题不在转换层
- timestamp: 2026-03-15T00:00:00Z
checked: zhihu_extractor.py 的 _extract_answer_content 方法
found: 使用 `.RichText` 选择器获取 HTML,然后调用 markdown_converter.convert()
implication: 提取逻辑看起来正确,需要验证选择器是否正确获取到包含图片的 HTML
- timestamp: 2026-03-15T00:00:00Z
checked: zhihu_article_crawler.py(MediaCrawler 版本)
found: 第139行使用 `content_text` 字段,这是纯文本,不包含 HTML
implication: 这是另一个路径(MediaCrawler),但 kb_pipeline 使用的是 ZhihuPlaywrightExtractor
- timestamp: 2026-03-15T00:01:00Z
checked: 知乎懒加载图片机制
found: 知乎图片的 src 属性是 SVG 占位符(data:image/svg+xml;...),真实 URL 在 data-actualsrc 或 data-original 属性中
implication: markdownify 只读取 src 属性,得到无效占位符而非真实图片链接
- timestamp: 2026-03-15T00:01:00Z
checked: 模拟知乎懒加载 HTML 转换测试
found: 确认转换结果包含 `data:image/svg+xml` 占位符而不是真实图片 URL
implication: ROOT CAUSE CONFIRMED - 需要预处理 HTML 提取真实图片 URL
- timestamp: 2026-03-16T00:00:00Z
checked: 知乎 HTML 结构中的 noscript 标签
found: 知乎图片 HTML 结构为 `<figure><img data-actualsrc=...><noscript><img src=...></noscript></figure>`,noscript 内包含备用图片
implication: ROOT CAUSE CONFIRMED (问题2) - 修复懒加载后,两个 img 都有真实 URL,导致重复
## Resolution (问题2: 原文丢失)
root_cause: 知乎回答 (answer) 和专栏 (zhuanlan) 的原文没有被追加到分析报告中。代码只在 `content_type == "article"` 时设置和追加原文,但知乎回答的类型是 `"answer"`
fix:
- `deep_analyzer.py:184` - 扩展条件为 `content_type in ("article", "answer", "zhuanlan")`
- `analyze.py:244` - 扩展条件为 `content_type in ("article", "answer", "zhuanlan")`
verification: 用户确认知乎图片已正常显示 - 2026-03-16
files_changed: [kb-deep-analyzer/deep_analyzer.py, kb_pipeline/processors/analyze.py]