vansh-py04/Intelligent-Data-Pipeline
GitHub: vansh-py04/Intelligent-Data-Pipeline
一个轻量级的端到端数据工程原型,从ESPN MMA抓取文章数据,经NLP丰富后存入Parquet数据湖并用DuckDB进行分析。
Stars: 0 | Forks: 0
# 智能数据 Pipeline
一个轻量级数据工程原型,用于实现端到端的文章抓取、清洗、丰富、存储和分析。
## 概述
本仓库实现了一个小型 pipeline,功能包括:
- 从 ESPN MMA 页面抓取文章元数据和内容,
- 清洗和转换文本内容,
- 使用 NLP 派生的元数据(拳手姓名、赛事信息、情感、地点)来丰富记录,
- 将筛选处理后的记录以结构化格式写入磁盘,
- 使用 DuckDB 对存储的记录执行分析。
该 pipeline 被设计为一个模块化的 Python 项目,对抓取、处理、存储和分析进行了清晰的分离。
## 功能
- 使用 `cloudscraper` 进行网页抓取,并在页面返回 HTTP 202 时提供可选的 Selenium 回退方案。
- 简单的文本清洗和记录转换。
- 使用 spaCy 和 TextBlob 进行 NLP 丰富处理,用于:
- 拳手提取,
- 赛事和地点提取,
- 情感评分。
- 存储层,按源/日期分区将记录写入 `data/curated`。
- 通过 DuckDB 针对存储的 Parquet 输出执行分析查询。
- 最小化的日志记录,输出到控制台和 `logs/app.log`。
## 项目结构
- `main.py` - 运行 pipeline 和分析的入口点。
- `ingestion/` - 网页爬虫和文章抓取逻辑。
- `processing/` - 文本清洗器、转换器和丰富器。
- `storage/` - schema 定义和记录写入器。
- `analytics/` - 查询定义和报告。
- `utils/` - 可复用的工具,例如日志记录。
- `data/` - 原始、已处理和精选的数据集文件夹。
- `logs/` - 运行时日志 (`app.log`)。
## 设置说明
1. 创建并激活 Python 虚拟环境:
```
python -m venv venv
source venv/Scripts/activate
```
2. 安装依赖项:
```
pip install -r requirements.txt
```
3. 确保已安装 spaCy 模型:
```
python -m spacy download en_core_web_sm
```
## 运行 Pipeline
执行主 pipeline 和分析运行器:
```
python main.py
```
当前的 pipeline 实现最多抓取前 5 篇文章,然后写入筛选处理后的记录。
## 输出
- 筛选处理后的记录默认写入 `data/curated`。
- 写入器使用分区路径格式,如:`data/curated/source=espn/date=YYYY-MM-DD/articles__.parquet`。
- 分析查询从 `data/curated/**/*.parquet` 读取。
- 运行时日志写入 `logs/app.log`。
## 分析
分析模块目前支持:
- 按文章提及次数统计的顶级拳手,
- 每个赛事的文章数量,
- 每个赛事的平均情感倾向,
- 最新文章摘要。
## 注意事项
- 该仓库目前使用简单的硬编码 pipeline 流程,没有命令行参数解析。
- `logs/` 被 Git 忽略,因此不会提交运行时日志。
- 如果未安装或无法使用 Selenium,抓取过程可能会回退到主要的 HTTP scraper 路径。
## 未来增强
潜在的后续步骤包括:
- 添加用于限制 (limit)、输出格式和输出路径的 CLI 选项,
- 改进抓取过程中的重试处理和错误传播,
- 为核心 pipeline 阶段添加单元测试,
- 支持增量/流式抓取。
标签:Cloudscraper, DuckDB, ESPN, ETL Pipeline, Gradle集成, MMA, NLP, Parquet, Python, Selenium, spaCy, TextBlob, URL抓取, 事件检测, 代码示例, 体育数据, 命名实体提取, 情感分析, 数据分区, 数据分析, 数据工程, 数据抓取, 数据清洗, 数据湖, 数据科学, 数据管道, 数据转换, 文本挖掘, 无后门, 端到端, 综合格斗, 资源验证, 软件工程, 逆向工具