ygp-gdzwfw-gov-cn/requirements.md

84 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 广东省公共资源交易平台数据抓取需求
## 1. 项目目标
开发一个 Python 爬虫程序,用于抓取[广东省公共资源交易平台](https://ygp.gdzwfw.gov.cn/#/44/jygg)的特定招标公告数据。
## 2. 抓取范围
- **目标网站**: `https://ygp.gdzwfw.gov.cn/#/44/jygg`
- **筛选条件**: 只抓取公告标题中明确包含 “**中标结果**” 关键字的条目。
## 3. 数据提取要求
对于每一条符合条件的“中标结果”公告,需要提取以下三项信息:
1. **项目标题**: 公告的完整标题。
2. **发布时间**: 公告的发布日期。
3. **详细链接**: 指向公告详情页的完整、可直接访问的 URL。
## 4. 功能要求
### 4.1. 日期范围过滤
- 程序需要支持通过命令行参数传入`开始日期`和`结束日期`。
- 如果用户提供了日期范围,则只抓取发布时间在该范围内的公告。
- 如果用户**未提供**任何日期参数,程序应默认抓取**今天**发布的公告。
### 4.2. 分页处理
- 爬虫必须能够自动处理分页。
- 从第一页开始抓取,自动加载并解析后续所有页面的数据,直到最后一页,确保不遗漏任何数据。
### 4.3. 详情页链接处理
- 意识到详情页链接可能是通过 JavaScript 点击事件动态生成的。
- 在抓取过程中,需要分析页面交互逻辑(可能涉及加密或后端 API 调用),以正确解析出真实的详情页链接。
## 5. 开发语言
- **编程语言**: Python
## 6. 接口参考与数据示例
根据 `examples/` 目录下的抓包数据,以下是接口分析结果:
### 6.1. 列表页接口
- **接口 URL**: `https://ygp.gdzwfw.gov.cn/ggzy-portal/search/v2/items`
- **请求方式**: `POST`
- **关键请求头**:
- `Content-Type`: `application/json`
- `X-Dgi-Req-Nonce`, `X-Dgi-Req-Signature`, `X-Dgi-Req-Timestamp`: 涉及请求签名,需要逆向分析 JS 或使用自动化工具处理。
- `_horizon_sid`, `_horizon_uid`: Cookie 参数。
- **请求体 (Payload) 示例**:
```json
{
"type": "trading-type",
"openConvert": false,
"keyword": "",
"siteCode": "44",
"secondType": "A",
"tradingProcess": "",
"thirdType": "[]",
"projectType": "",
"publishStartTime": "",
"publishEndTime": "",
"pageNo": 2,
"pageSize": 10
}
```
- **响应结构 (关键字段)**:
- `data.pageData`: 公告列表数组。
- `noticeTitle`: 公告标题。
- `publishDate`: 发布时间 (格式: `yyyyMMddHHmmss`)。
- `noticeThirdTypeDesc`: 公告类型描述 (筛选 "中标结果")。
- 构造详情页所需的字段: `noticeId`, `projectCode`, `tradingProcess` (作为 `bizCode`), `siteCode`, `pubServicePlat`, `noticeSecondTypeDesc`, `projectType`.
### 6.2. 详情页链接构造
详情页 URL 并非直接在列表接口返回,而是通过前端拼接。根据 `examples/detail-url.json` 和列表数据的对比URL 模式如下:
`https://ygp.gdzwfw.gov.cn/#/44/new/jygg/v3/A?noticeId={noticeId}&projectCode={projectCode}&bizCode={tradingProcess}&siteCode={siteCode}&publishDate={publishDate}&source={pubServicePlat}&titleDetails={noticeSecondTypeDesc}&classify={projectType}`
*注: URL 中的参数值可能需要进行 URL 编码。`nodeId` 参数在示例 URL 中存在,但在列表响应中未直接发现,需确认是否必须或生成逻辑。*