fix: 文档解析链路修复 —— 缺失导入 + 静默吞错

- fetch.py: 补全 subprocess/zipfile/xml.etree.ElementTree/io 导入
  (PDF/DOCX/XLSX 解析此前直接 NameError)
- fetch.py main(): 检查 FetchResult.error_code, 文档解析失败不再
  静默输出空内容 + exit 0, 改为明确报错并 exit 1
- search.py fetch_page(): 同样检查 error_code, 修复 --fetch 抓取
  PDF 失败被误报 status=ok 的问题
- _parse_document_content: image/audio/video/* 类型统一返回
  E_UNSUPPORTED_MEDIA (此前退化为乱码文本)
This commit is contained in:
2026-08-03 17:51:05 +08:00
parent 157219d982
commit 6cedba9042
2 changed files with 21 additions and 1 deletions
+8
View File
@@ -879,6 +879,14 @@ def fetch_page(url: str, timeout: int = 10, auth_headers: dict = None,
# 而非字符串匹配("Too Many Requests" 不含 "429" 会漏判)
error_code = classify_error(e)
# fetch_url 对 PDF/DOCX/XLSX 解析失败不抛异常,而是返回带 error_code
# 的 FetchResult——此处必须显式检查,否则失败会被当作成功处理
# (空文本 + status="ok")。
if result is not None and result.error_code:
error_msg = result.error_message or result.error_code
error_code = result.error_code
result = None
# 反爬检测(v2.0.0 增强:全文档扫描 + WAF 指纹库)
# 必须在 Wayback 兜底判断之前执行:Cloudflare 质询页常返回 HTTP 200
# 此时 result 非 None 但内容是反爬页,必须识别出来才能触发兜底。