thzxx
|
157219d982
|
feat(v2.2.1): 修复 Brotli 乱码 + 缓存治理 + 多页聚合 + 研究模式增强
核心修复(v2.2.1):
- 修复 Brotli 乱码 bug: build_browser_headers 智能声明 Accept-Encoding,
仅在 brotli 可用时才声明 br; fetch.py 双路径 br 解压(requests + stdlib)
此前 Chrome/Edge UA 抓取 example.com 等返回 br 的站点输出乱码
v2.2.0 新功能:
- main() 拆分为 _handle_verify/_handle_research/_handle_batch/_handle_single
- --cache-max-size MB: 缓存大小上限 + LRU 淘汰(默认 100MB)
- --pages N: 多页聚合 + 跨页去重
- --research 跨角度合并: 新增 merged_results 字段
- --stream / --progress: JSON Lines 流式输出 + request_id 贯穿
- --dry-run / --save-config / --log-format json
- --similarity-dedup / --throttle-* 参数化
- 15-UA 池 + PDF/docx 解析 + error_code 字段
文档与测试:
- SKILL.md: 版本号唯一(元数据),删除版本标记干扰
- README.md: 测试数量 539 -> 544
- 544 passed (新增 5 个 Content-Encoding 解压测试)
|
2026-08-03 17:14:33 +08:00 |
|
thzxx
|
28ff7c0a48
|
feat(v2.0.0): 反爬增强 + 抓取稳定性大幅提升
反爬措施:
- 浏览器指纹头 build_browser_headers(): Sec-Ch-Ua/Sec-Fetch-*/Accept-Language/Accept-Encoding, 绕过 80%+ 轻量 WAF
- 12 个 UA 池 (Chrome/Edge/Firefox x Win/macOS/Linux x v129-131)
- 确定性 UA 轮换 get_ua_for_domain(): SHA-256 按域名固定 UA, 会话内稳定跨进程可复现
- WAF 指纹库 _detect_anti_bot(): 识别 Cloudflare/Imperva/PerimeterX/DataDome/Akamai/通用, 全文档扫描
- Retry-After 遵守: 429/503 读取 header (数字或 HTTP date) 作为最小重试延迟
- 退避封顶 60s (原无上限, N=10 时 1536s 卡死进程)
抓取稳定性:
- requests.Session 复用: 连接池(10/host) + cookie 持久化 + TLS 会话恢复
- 超时分离 (connect, read) 元组, 避免大页面浪费已建连接
- Wayback Machine 兜底: 404/403/超时自动重试 web.archive.org, 默认启用 --no-fallback 关闭
- AdaptiveThrottle 自适应限流: 3 次失败翻倍延迟+减半并发, 5 次成功渐进恢复, 429 全局暂停 30s
- readability-lite 提取: article/main 缺失时按文本密度选最可能正文 div
新增 CLI flags:
- --fetch-report: 结构化抓取报告到 stderr (每 URL 状态/WAF 类型/兜底方式/字符数 + JSON 摘要)
- --no-fallback: 禁用 Wayback 兜底
- --referer: 设置 Referer 头 (默认实例 URL)
- --request-delay: 抓取请求间隔秒数 (默认 0.3, 自适应可能增大)
fetch 结果新字段: anti_bot_detected (bool), waf_type (str|null), fallback_used (str|null)
测试: 新增 4 个测试文件 (test_browser_headers/test_anti_bot/test_wayback_fallback/test_adaptive_throttle), 451 个测试全部通过
|
2026-08-01 21:34:57 +08:00 |
|