主要变更: 1. 重命名 ygp_crawler.py -> main.py 2. API参数优化: - tradingProcess 固定传 "513,2C52,3C52" 精准筛选中标结果 - pageSize 固定为 50 提高抓取效率 - 通过 publishStartTime/publishEndTime 传入时间范围 3. 默认查询最近3个月(原为当天) 4. 增量爬取改为默认开启(移除 -i 参数) 5. CSV文件添加 UTF-8 BOM,Excel可直接打开 6. 更新 README.md 文档 7. 添加前端 JS 代码参考文件到 assets/ 目录 使用方法: - 增量更新:python main.py - 全量查询:rm results.csv && python main.py Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
110 lines
3.5 KiB
Markdown
110 lines
3.5 KiB
Markdown
# 广东省公共资源交易平台爬虫
|
||
|
||
本项目是一个 Python 爬虫程序,用于抓取 [广东省公共资源交易平台](https://ygp.gdzwfw.gov.cn/#/44/jygg) 的中标结果公告。
|
||
|
||
## 功能特性
|
||
|
||
- **精准筛选**:通过 `tradingProcess` 字段直接筛选中标结果,无需标题关键词过滤。
|
||
- **日期范围查询**:支持指定开始和结束日期,**默认为最近3个月**。
|
||
- **高效分页**:每页 50 条记录,自动处理多页数据抓取。
|
||
- **API 时间过滤**:时间参数直接通过接口 `publishStartTime` 和 `publishEndTime` 传入,减少无效数据传输。
|
||
- **动态构造 URL**:根据接口返回字段自动生成可直接访问的详情页链接。
|
||
- **纯 HTTP 请求**:直接使用 aiohttp 调用官方 API,无需浏览器,轻量高效。
|
||
- **CSV 实时保存**:数据实时保存到 CSV 文件(带 UTF-8 BOM,Excel 可直接打开),同时输出到终端。
|
||
- **自定义输出路径**:支持通过参数指定输出文件路径。
|
||
- **增量爬取**:自动从已有 CSV 文件计算时间范围,只抓取新数据,避免重复。如需全量查询,删除 CSV 文件即可。
|
||
- **数据排序**:新数据在前,旧数据在后,按发布时间倒序排列。
|
||
|
||
## 环境要求
|
||
|
||
- Python 3.8+
|
||
|
||
## 安装步骤
|
||
|
||
1. **克隆项目并进入目录**
|
||
```bash
|
||
cd ygp-gdzwfw-gov-cn
|
||
```
|
||
|
||
2. **创建并激活虚拟环境 (推荐)**
|
||
```bash
|
||
python3 -m venv venv
|
||
source venv/bin/activate # macOS/Linux
|
||
# 或 venv\Scripts\activate # Windows
|
||
```
|
||
|
||
3. **安装依赖**
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 1. 抓取最近3个月的数据 (默认)
|
||
直接运行脚本,程序将自动抓取最近3个月的中标结果公告。
|
||
```bash
|
||
python main.py
|
||
```
|
||
|
||
### 2. 抓取指定日期范围
|
||
使用 `--start-date` 和 `--end-date` 参数(格式:`YYYY-MM-DD`)。
|
||
```bash
|
||
python main.py --start-date 2026-02-01 --end-date 2026-02-04
|
||
```
|
||
|
||
**示例:抓取最近7天的数据**
|
||
```bash
|
||
python main.py --start-date 2026-01-29 --end-date 2026-02-05
|
||
```
|
||
|
||
### 3. 自定义输出文件路径
|
||
使用 `-o` 或 `--output` 参数指定输出 CSV 文件的路径(默认为 `results.csv`)。
|
||
```bash
|
||
python main.py --start-date 2026-02-01 --end-date 2026-02-04 -o my_data.csv
|
||
```
|
||
|
||
### 4. 增量爬取(默认开启)
|
||
脚本默认启用增量爬取模式。会自动读取已有 CSV 文件,计算时间范围,只抓取新数据。
|
||
|
||
**自动计算日期范围(推荐)**:
|
||
```bash
|
||
# 自动从已有数据的最新日期+1开始,爬取到今天
|
||
python main.py
|
||
```
|
||
|
||
**手动指定日期范围**:
|
||
```bash
|
||
# 手动指定日期范围(仍会去重)
|
||
python main.py --start-date 2026-02-01 --end-date 2026-02-04
|
||
```
|
||
|
||
**全量查询**:
|
||
```bash
|
||
# 删除 CSV 文件后运行,即可进行全量查询
|
||
rm results.csv
|
||
python main.py
|
||
```
|
||
|
||
**增量爬取特性**:
|
||
- 自动识别已有 CSV 文件中的数据时间范围
|
||
- 自动去重(根据详情链接判断)
|
||
- 新数据插入到文件前面,旧数据保留在后面
|
||
- 如果无新数据可抓取,自动退出
|
||
|
||
## 数据输出示例
|
||
|
||
### 终端输出(JSON 格式,便于阅读)
|
||
```json
|
||
{
|
||
"项目标题": "某某项目中标结果公示",
|
||
"发布时间": "2026-02-04 17:30:02",
|
||
"详细链接": "https://ygp.gdzwfw.gov.cn/#/44/new/jygg/v3/A?noticeId=..."
|
||
}
|
||
```
|
||
|
||
### CSV 文件格式
|
||
```csv
|
||
项目标题,发布时间,详细链接
|
||
某某项目中标结果公示,2026-02-04 17:30:02,https://ygp.gdzwfw.gov.cn/#/44/new/jygg/v3/A?...
|
||
```
|