问题域/PD-464

多源数据聚合

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 作为源特有数据的逃生舱保持模型统一