# epaper-crawler **Repository Path**: deepeye/epaper-crawler ## Basic Information - **Project Name**: epaper-crawler - **Description**: 电子报爬虫系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-20 - **Last Updated**: 2026-03-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PDMI Tools - 电子报爬虫系统 ## 功能说明 本系统用于采集各大电子报纸网站的新闻稿件,支持多种网站结构和反爬虫策略。 ### 主要功能 1. **多站点支持**:支持新华每日电讯、光明日报、经济日报等多家电子报 2. **智能采集**:根据网站结构自动选择采集策略(Type A/B/C/D) 3. **动态渲染**:使用 Playwright 处理 JavaScript 渲染的页面 4. **多存储支持**:支持 MySQL 和 Kafka 双写 5. **定时调度**:内置调度器,支持 Cron 表达式配置 ## 快速开始 ### 方式一:Docker 部署(推荐) 详见 [deploy/README.md](deploy/README.md) ```bash # 1. 配置环境变量 cp .env.example .env vim .env # 2. 构建并启动 ./deploy/deploy.sh build ./deploy/deploy.sh start ``` ### 方式二:本地运行 ```bash # 使用 uv 安装依赖 uv sync # 安装 Playwright 浏览器 uv run playwright install chromium # 运行爬虫 uv run python -m crawler.main crawl ``` ## 常用命令 ```bash # 列出所有站点 python -m crawler.main list # 立即爬取所有启用的站点 python -m crawler.main crawl # 爬取指定站点 python -m crawler.main crawl --sites "新华每日电讯" "光明日报" # 启动调度模式 python -m crawler.main schedule ``` ## 配置说明 ### 环境变量 (.env) ```ini # MySQL配置 MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_USER=root MYSQL_PASSWORD=your_password MYSQL_DATABASE=crawler_data_center # HDFS配置 HDFS_URL=http://namenode:50070 HDFS_USER=hdfs # Kafka配置(可选) KAFKA_BOOTSTRAP_SERVERS=localhost:9092 ``` ### 站点配置 (crawler/config/sites.yaml) ```yaml sites: - name: "新华每日电讯" enabled: true schedule: "0 6 * * *" # 每天早上6点 spider_type: "type_c" fetcher: "DynamicFetcher" domain: "mrdx.cn" # ... ``` ## Spider 类型 | 类型 | 说明 | 适用场景 | |------|------|----------| | Type A | 静态HTML,列表+详情页 | 简单静态网站 | | Type B | 动态加载,JSON API | AJAX 加载的网站 | | Type C | 版面导航结构 | 有版面目录的电子报 | | Type D | 多级导航结构 | 复杂多级导航的电子报 | ## 项目结构 ``` pdmi-tools/ ├── main.py # 主程序入口 ├── config.py # 配置管理 ├── mysql_client.py # MySQL数据库操作 ├── hdfs_client.py # HDFS文件读取 ├── kafka_consumer.py # Kafka消息打印工具 ├── draw.py # 桑基图生成脚本 ├── .env.example # 环境变量示例 ├── .env # 环境变量(需自行创建) ├── pyproject.toml # 项目配置 └── README.md # 本文档 ``` ## 注意事项 1. 确保有权限访问MySQL数据库和HDFS集群 2. HDFS文件必须存在且格式正确(每行一个JSON对象) 3. 程序默认统计昨天的数据 4. 如果某日数据已存在,会更新该记录(使用ON DUPLICATE KEY UPDATE)