zhaojunlong b4afc1ce5a ```
feat(scheduler): 添加定时任务功能并集成前端配置界面

- 引入 node-cron 依赖以支持定时任务调度
- 新增定时任务相关 API 接口:获取配置、更新配置、查询状态、手动触发任务
- 前端新增“定时任务”标签页,支持 Cron 表达式配置与友好时间展示
- 支持通过 Web 界面启用/禁用定时任务、设置执行计划和金额阈值
- 定时任务可自动采集数据并发送邮件报告,无需重启服务即可生效新配置
- 优化配置保存逻辑,避免敏感信息泄露
```
2025-12-15 15:22:42 +08:00
```
2025-12-15 15:22:42 +08:00
```
2025-12-15 15:22:42 +08:00
```
2025-12-15 15:22:42 +08:00
```
2025-12-15 10:36:18 +08:00
```
2025-12-15 15:22:42 +08:00
```
2025-12-15 15:22:42 +08:00
```
2025-12-15 15:22:42 +08:00
```
2025-12-15 15:22:42 +08:00
```
2025-12-15 10:36:18 +08:00

南京公共工程建设中心 - 公告采集工具

一个用于采集南京公共工程建设中心公告信息的 Web 可视化工具。

功能特性

  • 采集公告列表(支持分页)
  • 按时间范围智能采集
  • 采集公告详情内容
  • 智能提取预算金额
  • 生成统计报告
  • Web 可视化界面
  • 导出 Word/Markdown 报告
  • RESTful API 支持

安装

npm install

使用方法

1. 启动服务器

npm start

2. 访问界面

打开浏览器访问: http://localhost:3000

3. 功能介绍

公告列表标签

  • 快速查看所有公告
  • 支持分页浏览
  • 一键获取最新公告列表

详情采集标签

  • 批量采集公告详情
  • 支持按时间范围采集
  • 自动提取预算金额
  • 可自定义采集数量

生成报告标签

  • 支持按时间范围生成报告
  • 设置金额阈值筛选项目
  • 实时统计项目信息
  • 一键导出 Word/Markdown 报告

报告示例

# 南京公共工程建设项目报告

**生成时间**: 2025/12/12 11:00:03

## 统计摘要

- 总项目数: 10
- 超过 50 万元的项目: 3
- 总金额: 5395.50 万元

## 项目列表

### 1. 项目名称

- **发布日期**: 2025-12-12
- **发布时间**: 2025-12-12 10:35:00
- **预算金额**: 5000 万元
- **链接**: https://...

API 接口文档

服务器启动后提供以下 RESTful API 接口:

1. 获取公告列表

GET /api/list?url=<列表页URL>&page=<页码>

参数:

  • url (可选): 列表页 URL,默认为官网首页
  • page (可选): 页码,默认为 1

2. 按时间范围获取列表

POST /api/list-daterange
Content-Type: application/json

{
  "startDate": "2025-11-01",
  "endDate": "2025-12-31",
  "maxPages": 23
}

3. 批量获取详情

POST /api/details
Content-Type: application/json

{
  "items": [{ "title": "...", "href": "...", "date": "..." }],
  "limit": 10
}

4. 生成报告

POST /api/report
Content-Type: application/json

{
  "url": "https://gjzx.nanjing.gov.cn/gggs/",
  "limit": 15,
  "threshold": 50
}

5. 按时间范围生成报告

POST /api/report-daterange
Content-Type: application/json

{
  "startDate": "2025-11-01",
  "endDate": "2025-12-31",
  "threshold": 50,
  "maxPages": 23
}

技术栈

  • 后端: Node.js + Express
  • 爬虫: Axios + Cheerio
  • 前端: 原生 HTML/CSS/JavaScript
  • 编码处理: iconv-lite (支持 GBK/UTF-8)
  • 文档导出: docx.js

项目结构

.
├── src/
│   └── server.js         # Web服务器及API
├── public/
│   ├── index.html        # Web界面
│   └── app.js           # 前端逻辑
├── package.json
└── README.md

注意事项

  1. 采集速度已限制为每条延迟 500ms-1s,避免请求过快
  2. 仅支持 gjzx.nanjing.gov.cn 域名的详情页解析
  3. 金额提取基于正则匹配,支持多种格式(预算金额、最高限价等)
  4. Web 服务器默认端口 3000,可在 server.js 中修改
  5. 按时间范围采集会在检测到所有公告早于起始日期时自动停止
  6. 编码自动识别,支持 GBK 和 UTF-8 网页

核心功能说明

时间范围采集逻辑

按时间范围采集时,程序会:

  1. 从第一页开始顺序采集
  2. 检查每页公告的日期是否在指定范围内
  3. 如果某页所有公告都早于起始日期,自动停止采集
  4. 支持设置最大页数限制,避免过度采集

金额提取规则

支持识别以下格式:

  • 预算金额: XX 万元
  • 最高限价: XX 万元
  • 预算: XX 万元
  • 金额: XX 万元
  • 直接数字: XX 万元

编码处理

自动识别网页编码:

  • 优先读取 Content-Type 中的 charset
  • 自动处理 GBK、GB2312 编码
  • 默认使用 UTF-8

常见问题

Q: 为什么采集速度比较慢?

A: 为了避免对服务器造成过大压力,程序限制了请求频率(每条延迟 500ms-1s)。这是一个负责任的爬虫设计。

Q: 如何采集指定日期范围的公告?

A: 在 Web 界面的"详情采集"和"生成报告"标签中勾选"按时间范围采集",然后输入起始和结束日期即可。

Q: 导出的报告在哪里?

A: 点击"导出 Word"或"导出 Markdown"按钮后会自动下载到浏览器的默认下载目录。

Q: 可以采集其他网站吗?

A: 需要修改 server.js 中的 BASE_URL 和相应的解析函数,因为不同网站的 HTML 结构不同。

更新日志

v1.0.0 (2025-12-12)

  • Web 可视化界面
  • 支持按时间范围采集
  • 支持分页浏览
  • 支持导出 Word/Markdown 报告
  • RESTful API 接口
  • 自动编码识别
  • 智能金额提取

License

MIT

Description
No description provided
Readme 4.3 MiB
Languages
JavaScript 75.3%
HTML 24.7%