多源数据聚合
Multi-Source Data Aggregation
从多个异构数据源并发抓取、归一化为统一模型的工程能力
子问题
1.数据源抽象与统一模型
2.并发抓取与错误隔离
3.源配置的声明式管理
4.HTTP客户端共享与连接池
5.跨源同一内容的 URL 归一化与内容合并
6.语义级话题去重(标题相似度 + AI 标签重叠)
7.无 API 数据源的 HTML 抓取与解析
各项目的解法1 solutions
Signals
横向对比
| 维度 | Horizon |
|---|---|
| 源抽象方式 | BaseScraper ABC + fetch(since) 统一契约,5 种子类实现 |
| 并发模型 | 两层 asyncio.gather:编排层并发 5 源 + scraper 内部并发子任务 |
| 错误隔离 | return_exceptions=True 逐个检查,单源失败不阻塞 |
| HTTP 客户端 | 单个 httpx.AsyncClient 共享连接池,async with 上下文管理 |
| 配置体系 | Pydantic 嵌套模型树,每种源独立 Config 类,JSON 驱动 |
| 去重策略 | URL 归一化 + 标题 Jaccard + AI 标签重叠三层去重 |
| 速率限制 | Reddit/Telegram 429 检测 + Retry-After sleep 重试 |
最佳实践
1.定义抽象基类统一 fetch 接口
2.使用 asyncio.gather + return_exceptions 隔离单源故障
3.Pydantic 模型验证源配置
4.共享 httpx.AsyncClient 上下文管理器统一连接池生命周期
5.scraper 内部二级 gather 实现子源并发(如多 subreddit)
6.metadata dict 作为源特有数据的逃生舱保持模型统一