# 南京公共工程建设中心 - 公告抓取工具 一个用于抓取南京公共工程建设中心公告信息的 Web 可视化工具。 ## 功能特性 - ✅ 抓取公告列表(支持分页) - ✅ 按时间范围智能抓取 - ✅ 抓取公告详情内容 - ✅ 智能提取预算金额 - ✅ 生成统计报告 - ✅ Web可视化界面 - ✅ 导出Word/Markdown报告 - ✅ RESTful API支持 ## 安装 ```bash npm install ``` ## 使用方法 ### 1. 启动服务器 ```bash npm start ``` ### 2. 访问界面 打开浏览器访问: **http://localhost:3000** ### 3. 功能介绍 **公告列表标签** - 快速查看所有公告 - 支持分页浏览 - 一键获取最新公告列表 **详情抓取标签** - 批量抓取公告详情 - 支持按时间范围抓取 - 自动提取预算金额 - 可自定义抓取数量 **生成报告标签** - 支持按时间范围生成报告 - 设置金额阈值筛选项目 - 实时统计项目信息 - 一键导出Word/Markdown报告 ## 报告示例 ```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