# article-crawler **Repository Path**: qiweb/article-crawler ## Basic Information - **Project Name**: article-crawler - **Description**: # 文章爬取系统 一个基于 Node.js 和 Express.js 的文章爬取系统,支持单篇文章爬取和批量爬取,具有任务调度、图片处理、数据管理等功能。 系统功能需求: A. 前台功能 - 单篇文章爬取 - 批量文章爬取 - 爬取历史记录查看 - 操作日志查看 - 文章预览功能 B. 后台管理功能 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-07 - **Last Updated**: 2025-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 文章爬取系统 一个基于 Node.js 和 Express.js 的文章爬取系统,支持单篇文章爬取和批量爬取,具有任务调度、图片处理、数据管理等功能。 系统功能需求: A. 前台功能 - 单篇文章爬取 - 批量文章爬取 - 爬取历史记录查看 - 操作日志查看 - 文章预览功能 B. 后台管理功能 - 管理员登录/登出 - 爬虫任务管理 - 定时任务配置 - 爬虫规则配置 - 系统设置 C. 爬虫功能 - 自动提取文章标题、作者、发布时间 - 保留文章格式和图片 - 过滤评论、广告、链接 - 支持子网页自动解析 - 支持批量爬取 - 支持定时任务 前端: - HTML5 + CSS3 - JavaScript (ES6+) - Bootstrap 5 (UI框架) - Axios (HTTP请求) 后端: - Node.js - Express.js (Web框架) - Cheerio (网页解析) - node-schedule (定时任务) - SQLite3 (数据库) - JWT (身份认证) 工具: - Puppeteer (网页爬虫) - Winston (日志管理) 项目结构 article-crawler/ ├── config/ # 配置文件 │ ├── database.js # 数据库配置 │ ├── crawler.js # 爬虫配置 │ └── auth.js # 认证配置 │ ├── public/ # 静态资源 │ ├── css/ # 样式文件 │ ├── js/ # 客户端脚本 │ └── images/ # 图片资源 │ ├── src/ │ ├── controllers/ # 控制器 │ │ ├── articleController.js │ │ ├── authController.js │ │ └── taskController.js │ │ │ ├── models/ # 数据模型 │ │ ├── Article.js │ │ ├── Task.js │ │ └── User.js │ │ │ ├── services/ # 业务逻辑 │ │ ├── crawlerService.js │ │ ├── schedulerService.js │ │ └── imageService.js │ │ │ ├── utils/ # 工具函数 │ │ ├── logger.js │ │ ├── validator.js │ │ └── helper.js │ │ │ ├── routes/ # 路由 │ │ ├── api.js │ │ ├── admin.js │ │ └── auth.js │ │ │ └── middleware/ # 中间件 │ ├── auth.js │ └── error.js │ ├── views/ # 页面模板 │ ├── index.html │ ├── admin/ │ └── components/ │ ├── database/ # 数据库文件 │ └── crawler.db │ ├── logs/ # 日志文件 │ ├── access.log │ ├── error.log │ └── crawler.log │ ├── tests/ # 测试文件 │ ├── unit/ │ └── integration/ │ ├── scripts/ # 脚本文件 │ ├── init-db.js │ └── backup.js │ ├── package.json ├── README.md └── .gitignore 数据库设计 -- 文章表 CREATE TABLE articles ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, author TEXT, publish_date DATETIME, content TEXT NOT NULL, source_url TEXT NOT NULL, images TEXT, -- JSON格式存储图片URL created_at DATETIME DEFAULT CURRENT_TIMESTAMP, status INTEGER DEFAULT 1 ); -- 任务表 CREATE TABLE tasks ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, url_pattern TEXT NOT NULL, schedule TEXT, -- cron表达式 last_run DATETIME, status INTEGER DEFAULT 1, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 操作日志表 CREATE TABLE logs ( id INTEGER PRIMARY KEY AUTOINCREMENT, type TEXT NOT NULL, message TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 用户表 CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, role TEXT DEFAULT 'admin', created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); API设计 A. 文章管理 GET /api/articles # 获取文章列表 POST /api/articles/crawl # 爬取单篇文章 GET /api/articles/:id # 获取文章详情 DELETE /api/articles/:id # 删除文章 B. 任务管理 GET /api/tasks # 获取任务列表 POST /api/tasks # 创建任务 PUT /api/tasks/:id # 更新任务 DELETE /api/tasks/:id # 删除任务 POST /api/tasks/:id/run # 立即执行任务 C. 日志管理 GET /api/logs # 获取日志列表 GET /api/logs/crawler # 获取爬虫日志 GET /api/logs/operation # 获取操作日志 D. 认证 POST /api/auth/login # 登录 POST /api/auth/logout # 登出 GET /api/auth/profile # 获取用户信息 安全考虑 - 使用 JWT 进行身份认证 - 实现请求频率限制 - 对敏感数据进行加密 - 实现 SQL 注入防护 - 添加 CORS 配置 - 实现日志记录和监控 ## 安装 1. 克隆项目 ```bash git clone https://github.com/yourusername/article-crawler.git cd article-crawler ``` 2. 安装依赖 ```bash npm install ``` 3. 配置环境变量 ```bash cp .env.example .env # 编辑 .env 文件,设置必要的环境变量 ``` 4. 初始化数据库 ```bash npm run init-db ``` ## 运行 开发环境: ```bash npm run dev ``` 生产环境: ```bash npm start ``` ## API 文档 ### 文章管理 - GET /api/articles - 获取文章列表 - GET /api/articles/:id - 获取文章详情 - POST /api/articles/crawl - 爬取单篇文章 - POST /api/articles/batch-crawl - 批量爬取文章 - DELETE /api/articles/:id - 删除文章 ### 任务管理 - GET /api/tasks - 获取任务列表 - GET /api/tasks/:id - 获取任务详情 - POST /api/tasks - 创建任务 - PUT /api/tasks/:id - 更新任务 - DELETE /api/tasks/:id - 删除任务 - POST /api/tasks/:id/run - 运行任务 ### 系统设置 - GET /api/settings - 获取系统设置 - PUT /api/settings/basic - 更新基本设置 - PUT /api/settings/image - 更新图片设置 - PUT /api/settings/cleanup - 更新清理设置 - POST /api/settings/optimize-db - 优化数据库 - POST /api/settings/clear-cache - 清理缓存 - POST /api/settings/clear-logs - 清理日志 ### 日志管理 - GET /api/logs - 获取日志列表 - GET /api/logs/:id - 获取日志详情 - POST /api/logs/clear - 清理日志 ### 用户认证 - POST /api/auth/login - 用户登录 - POST /api/auth/logout - 用户登出 - GET /api/auth/status - 获取认证状态 - PUT /api/auth/password - 修改密码 ## 配置说明 ### 基本设置 - siteName: 站点名称 - siteDescription: 站点描述 - maxConcurrentTasks: 最大并发任务数 - requestTimeout: 请求超时时间 - retryCount: 失败重试次数 ### 图片设置 - imageStorage: 图片存储方式(remote/local) - maxImageSize: 最大图片大小 - imageQuality: 图片压缩质量 ### 清理设置 - autoCleanup: 自动清理开关 - cleanupInterval: 清理间隔 - maxArticleAge: 文章最大保留天数 ## 开发指南 ### 代码规范 - 使用 ESLint 进行代码检查 - 使用 Prettier 进行代码格式化 - 遵循 JavaScript Standard Style ### 提交规范 - feat: 新功能 - fix: 修复问题 - docs: 文档修改 - style: 代码格式修改 - refactor: 代码重构 - test: 测试用例修改 - chore: 其他修改 ### 分支管理 - main: 主分支 - develop: 开发分支 - feature/*: 功能分支 - bugfix/*: 修复分支 - release/*: 发布分支 ## 测试 运行测试: ```bash npm test ``` 运行测试覆盖率报告: ```bash npm run test:coverage ``` ## 部署 1. 构建前端资源 ```bash npm run build ``` 2. 启动生产服务器 ```bash npm start ``` ## 贡献指南 1. Fork 项目 2. 创建功能分支 3. 提交更改 4. 推送到分支 5. 创建 Pull Request ## 许可证 MIT License ## 作者 Your Name