84 lines
3.4 KiB
Markdown
84 lines
3.4 KiB
Markdown
# 广东省公共资源交易平台数据抓取需求
|
||
|
||
## 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 中存在,但在列表响应中未直接发现,需确认是否必须或生成逻辑。* |