459 lines
19 KiB
Python
459 lines
19 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
爬虫配置文件
|
||
"""
|
||
import os
|
||
from pathlib import Path
|
||
|
||
try:
|
||
from dotenv import load_dotenv
|
||
load_dotenv(Path(__file__).parent / ".env")
|
||
except ImportError:
|
||
pass
|
||
|
||
# 浙江省公共资源交易中心
|
||
ZHEJIANG_CONFIG = {
|
||
"name": "浙江省公共资源交易中心",
|
||
"base_url": "https://ggzy.zj.gov.cn",
|
||
"api_url": "https://ggzy.zj.gov.cn/inteligentsearch/rest/esinteligentsearch/getFullTextDataNew",
|
||
# 交易领域代码
|
||
"categories": {
|
||
"工程建设": "002001",
|
||
"政府采购": "002002",
|
||
"土地使用权": "002003",
|
||
"国有产权": "002004",
|
||
"矿业权": "002006",
|
||
"其他交易": "002007",
|
||
},
|
||
# 公告类型代码(工程建设)
|
||
"notice_types": {
|
||
"项目登记信息": "002001008",
|
||
"招标计划": "002001013",
|
||
"招标文件公示": "002001011",
|
||
"招标公告": "002001001",
|
||
"资格预审公告": "002001002",
|
||
"澄清修改": "002001006",
|
||
"资格预审结果": "002001007",
|
||
"开标结果公示": "002001003",
|
||
"中标候选人公示": "002001004",
|
||
"中标结果公告": "002001005",
|
||
"合同信息公开": "002001009",
|
||
}
|
||
}
|
||
|
||
# 台州公共资源交易中心
|
||
TAIZHOU_CONFIG = {
|
||
"name": "台州公共资源交易中心",
|
||
"base_url": "https://ggzy.tzztb.zjtz.gov.cn",
|
||
"api_url": "https://ggzy.tzztb.zjtz.gov.cn/rest/secaction/getSecInfoListYzm",
|
||
"site_guid": "7eb5f7f1-9041-43ad-8e13-8fcb82ea831a",
|
||
# 交易领域
|
||
"categories": {
|
||
"工程建设": "002001",
|
||
"政府采购": "002002",
|
||
"产权交易": "002003",
|
||
"拓展资源": "002004",
|
||
"土地交易": "002005",
|
||
},
|
||
# 公告类型(工程建设)
|
||
"notice_types": {
|
||
"招标计划公示": "002001014",
|
||
"招标公告": "002001002",
|
||
"资格预审公告": "002001003",
|
||
"中标候选人公示": "002001005",
|
||
"中标结果公告": "002001006",
|
||
"保证金退还公示": "002001008",
|
||
}
|
||
}
|
||
|
||
# 爬虫设置(云端部署安全参数)
|
||
SPIDER_CONFIG = {
|
||
"page_size": 20, # 每页数量
|
||
"max_pages": 10, # 最大爬取页数
|
||
# --- 延迟控制 ---
|
||
"delay_min": 3, # 列表页最小延迟(秒)
|
||
"delay_max": 6, # 列表页最大延迟(秒)
|
||
"detail_delay_min": 2, # 详情页最小延迟(秒)
|
||
"detail_delay_max": 5, # 详情页最大延迟(秒)
|
||
# --- 安全阈值 ---
|
||
"timeout": 30, # HTTP 超时时间(秒)
|
||
"max_retries": 3, # 单次请求最大重试次数
|
||
"max_consecutive_errors": 5, # 连续失败熔断阈值(降低=更早停止)
|
||
"max_total_requests": 300, # 单次运行最大请求数
|
||
"requests_per_minute": 10, # 每分钟最大请求数(超出自动减速)
|
||
}
|
||
|
||
# 数据存储路径
|
||
DATA_DIR = "data"
|
||
|
||
# ============ DeepSeek AI 处理配置 ============
|
||
|
||
DEEPSEEK_API_KEY = os.environ.get("DEEPSEEK_API_KEY", "")
|
||
|
||
PROCESSING_CONFIG = {
|
||
"temp_dir": "temp_files", # 临时文件目录
|
||
"output_dir": "data", # AI处理结果输出目录
|
||
"request_timeout": 90, # DeepSeek API 超时(秒)
|
||
"max_content_length": 120000, # 发送给 DeepSeek 的最大内容长度
|
||
"api_delay": 1, # API 调用间隔(秒)
|
||
}
|
||
|
||
# 区域配置:按「站点+公告类型」定义需要AI提取的字段
|
||
REGION_CONFIGS = {
|
||
# key 格式: "site:notice_type"
|
||
"zhejiang:招标文件公示": {
|
||
"region_name": "浙江招标文件公示",
|
||
"link_field": "招标文件链接", # 爬虫"链接"映射到的字段名
|
||
"ai_fields": [
|
||
"类型", "地区", "投标截止日", "最高投标限价", "最高限价",
|
||
"资质要求", "业绩要求", "评标办法", "评分说明与资信评分标准",
|
||
"有无答辩", "招标人", "项目概况", "造价付款方式", "批准文号",
|
||
],
|
||
},
|
||
"zhejiang:招标公告": {
|
||
"region_name": "浙江招标公告",
|
||
"link_field": "公告链接",
|
||
"ai_fields": ["批准文号", "投标截止日", "招标估算金额"],
|
||
},
|
||
"zhejiang:澄清修改": {
|
||
"region_name": "浙江澄清修改",
|
||
"link_field": "澄清文件链接",
|
||
"ai_fields": ["批准文号"],
|
||
},
|
||
"zhejiang:招标计划": {
|
||
"region_name": "浙江招标计划",
|
||
"link_field": "公告链接",
|
||
"ai_fields": ["批准文号", "类型", "地区", "招标时间"],
|
||
},
|
||
|
||
"taizhou:招标计划公示": {
|
||
"region_name": "台州招标计划",
|
||
"link_field": "公告链接",
|
||
"ai_fields": ["批准文号", "类型", "地区", "招标时间", "预估金额"],
|
||
},
|
||
}
|
||
|
||
# DeepSeek 提示词模板
|
||
DEEPSEEK_PROMPTS = {
|
||
"批准文号": """请从招标公告中提取项目批准文号。
|
||
|
||
批准文号的常见格式:
|
||
- 台建招备[2026]XXX号
|
||
- 浙建计[2026]XXX号
|
||
- 2302-XXXXXX-XX-XX-XXXXXX(项目代码格式)
|
||
|
||
查找关键词:批准文号、备案登记号、项目代码、项目编号、招标编号
|
||
|
||
请直接返回批准文号,不要其他解释。
|
||
如果未找到,请返回"文档未提及"。""",
|
||
|
||
"资质要求": """从招标文件中提取企业资质等级。
|
||
|
||
搜索策略:
|
||
1. 直接查找:资质要求、资质条件、资质等级、施工总承包、专业承包
|
||
2. 查找章节:投标人须知前附表、招标公告、资格审查条件
|
||
3. 特别注意:必须检查PDF附件中的内容,附件中通常包含详细的资质要求
|
||
4. 如果写"见投标人须知前附表"或类似引用,请必须查找并提取前附表中的具体资质要求
|
||
5. 如果前附表写"见招标公告",请在招标公告章节查找
|
||
|
||
重要:只返回资质类型和等级,不要任何其他内容!
|
||
|
||
正确格式示例:
|
||
建筑工程施工总承包三级及以上
|
||
市政公用工程施工总承包二级及以上
|
||
|
||
返回规则:
|
||
- 找到具体资质等级 → 返回资质等级
|
||
- 文档写"见招标公告"但招标公告在平台上 → 返回"详见招标公告"
|
||
- 确实未找到任何相关信息 → 返回"文档未提及""",
|
||
|
||
|
||
"业绩要求": """请从招标文件中提取投标人业绩要求。
|
||
|
||
搜索策略:
|
||
1. 重点查找:投标人资格要求、业绩要求、投标人须知前附表、招标公告、评分标准
|
||
2. 特别注意:必须检查PDF附件中的内容,附件中通常包含详细的业绩要求
|
||
3. 关注关键词:业绩、工程经验、类似项目、同类工程、中标业绩、类似工程业绩
|
||
4. 注意时间范围要求:近X年、自20XX年以来
|
||
5. 特别注意:如果文档中提到"见投标人须知前附表"或类似引用,请查找并提取前附表中的业绩要求
|
||
6. 如果业绩要求在评分标准中,请从评分标准中提取
|
||
|
||
必须提取的内容:
|
||
- 业绩的时间范围要求
|
||
- 业绩的具体要求(工程类型、规模、金额等)
|
||
- 业绩数量要求
|
||
- 项目负责人业绩要求(如有)
|
||
|
||
返回规则:
|
||
- 找到具体业绩要求 → 返回业绩要求内容
|
||
- 文档写"见招标公告"但招标公告在平台上 → 返回"详见招标公告"
|
||
- 确实未找到 → 返回"文档未提及""",
|
||
|
||
|
||
"评标办法": """请分析招标文件,判断采用的评标办法。
|
||
|
||
■ 必须检查以下内容:
|
||
1. 投标人须知前附表中的勾选项(☑/□)
|
||
2. "第三章 评标办法"的章节标题和具体内容
|
||
3. 附件中的评标定标章节(如"评标定标办法"、"评标细则"等)
|
||
4. 其他相关章节中关于评标方法的描述
|
||
|
||
■ 分析要点:
|
||
- 仔细阅读附件中评标定标章节的详细内容
|
||
- 关注评标方法的具体定义和操作流程
|
||
- 确认是否采用评定分离方式
|
||
- 区分综合评估法、经评审的最低投标价法等不同类型
|
||
|
||
■ 输出规则(评定分离优先):
|
||
- 如果文档中出现"☑采用评定分离"或"评定分离方式招标"或附件中明确说明采用评定分离→ 返回"评定分离"
|
||
- 综合评估法(含所有子类型)、资信商务评估法、合理低价法 → 返回"综合评估法"
|
||
- 经评审的最低投标价法 → 返回"经评审的最低投标价法"
|
||
|
||
■ 只能返回以下值之一:
|
||
1. 评定分离
|
||
2. 综合评估法
|
||
3. 经评审的最低投标价法
|
||
4. 文档未提及
|
||
|
||
只返回上述值之一,不要任何其他文字。""",
|
||
|
||
"评分说明与资信评分标准": """请从招标文件中提取评分说明和资信评分标准。
|
||
|
||
■ 核心原则:
|
||
- 只提取文档中明确存在的具体评分规则,严禁推测或编造
|
||
- 如果只有章节标题但没有具体评分细则,必须返回"文档未提及"
|
||
|
||
■ 搜索策略:
|
||
1. 全面查找:评分说明、评分标准、评分办法、评标细则、评标办法、评审办法
|
||
2. 关注章节:第三章 评标办法、评标定标办法、评分标准、商务标评审、技术标评审、资信标评审
|
||
3. 关键词扩展:评分、基准价、商务标、技术标、资信标、分值、得分、权重、评分办法、评标基准价、报价得分
|
||
4. 特别关注:信用评价、信用等级、信用分、信誉分、诚信分、企业信用、项目负责人信用
|
||
|
||
■ 必须提取的内容:
|
||
1. 总体评分结构(各部分分值分配)
|
||
- 必须在最前面总结总分结构:总分 =资信标 X分+技术标 X分+商务标 X分
|
||
- 确保分值总和为100分
|
||
2. 基准价计算方法
|
||
3. 信用分详细细则(包括企业和项目负责人):
|
||
- 信用等级划分标准(如A/B/C/D/E级对应的具体分数范围,如110分以上(含110分)、105-110分(含105分)等)
|
||
- 各等级对应的具体得分(如A级3分、B级2.5分等)
|
||
- 未取得信用评价的得分
|
||
- 特别关注项目负责人信用评价分的等级和分数要求
|
||
- 必须提取完整的分数范围和对应分数,如:A类(110-120分2.8分、120-130分2.85分)
|
||
- 必须提取完整的等级划分,如:A级:110分以上(含110分)、B级:105-110分(含105分)、C级:100-105分(含100分)、D级:90-100分(含90分)、E级:90分以下
|
||
- 必须提取附件中的信用等级划分标准,如《台州市住房和城乡建设局关于公布建筑工程和市政公用工程企业信用等级划分标准的通知》中的等级划分
|
||
- 必须提取具体的分数阈值,如110分以上(含110分)、105-110分(含105分)等
|
||
|
||
■ 示例输出:
|
||
总分=资信标15分+技术标65分+商务标20分;评标基准价=最高限价×K值(K=80%-95%);商务标20分(报价得分采用线性插值法);技术标65分(打分制);资信标15分(其中企业信用分:A级110分以上3分,B级105-110分2.5分,C级100-105分2分,D级90-100分1.5分,E级90分以下1分,未取得0.5分;项目负责人信用分:A级110分以上2分,B级105-110分1.5分,C级100-105分1分,D级90-100分0.5分,E级90分以下0.3分,未取得0.1分)。
|
||
|
||
■ 信用分提取示例:
|
||
投标人信用评价分:A类(110-120分2.8分、120-130分2.85分、130-140分2.9分、140-150分3分),B类(105-106分2.55分、106-107分2.6分、107-108分2.65分、108-109分2.7分、109-110分2.75分),C类2.3分,D类1.8分,E类1.3分,未取得0.8分。
|
||
|
||
■ 返回规则:
|
||
- 找到具体评分规则 → 用简洁语言总结,信用分部分需详细列出
|
||
- 文档中只有章节目录,无具体内容 → 返回"文档未提及"
|
||
- 无法确定 → 返回"文档未提及"(严禁编造)""",
|
||
|
||
"有无答辩": """请判断招标文件中是否要求"现场答辩"或"现场面试"。
|
||
关键词:答辩、面试、现场汇报、演示
|
||
|
||
如果明确要求答辩/面试,请返回"有";
|
||
如果明确说明不需要,请返回"无";
|
||
如果未提及,请返回"无"。""",
|
||
|
||
"项目概况": """请从招标文件中提取项目概况信息。
|
||
|
||
查找章节:项目概况、工程概况、建设规模、招标范围
|
||
|
||
必须提取:
|
||
1. 建设地点
|
||
2. 建设规模(长度×宽度、面积、层数等)
|
||
3. 招标范围
|
||
4. 计划工期
|
||
5. 质量要求
|
||
|
||
请按以下格式输出:
|
||
建设地点:XX;建设规模:XX;招标范围:XX;计划工期:≤XX日历天;质量要求:XX
|
||
|
||
如果未找到,请返回"文档未提及"。""",
|
||
|
||
"类型": """请根据项目信息判断项目类型。
|
||
|
||
只返回以下类型之一:
|
||
施工类(需细分):总承包、市政、安装、装饰、公路、水利、电力
|
||
其他类型:勘察、设计、监理、采购、咨询、其他
|
||
|
||
判断规则:
|
||
1. 名称含"设计"→设计,"监理"→监理,"勘察/测量"→勘察,"EPC/总承包"→总承包
|
||
2. 施工类细分:道路/桥梁/排水/管网→市政,公路/国道→公路,装修/幕墙→装饰,机电/电气→安装,房屋/学校/医院→总承包,水利/河道/水库→水利,电力/变电/输电→电力
|
||
|
||
只返回类型名称,不要其他解释。""",
|
||
|
||
"地区": """请从招标文件中提取项目所在地区。
|
||
|
||
搜索策略(按优先级):
|
||
1. 直接查找:工程地点、建设地点、项目位置
|
||
2. 从招标人名称提取
|
||
3. 从信息来源提取
|
||
4. 从项目名称提取
|
||
|
||
输出格式:市+区/县,如"金华市金东区"、"台州市椒江区"
|
||
如果只能确定市级,返回市名。
|
||
如果确实无法提取,请返回"文档未提及"。""",
|
||
|
||
"最高限价": """请从招标文件中提取价格信息,必须返回具体数字金额。
|
||
|
||
按优先级查找:
|
||
1. 最高投标限价
|
||
2. 招标控制价
|
||
3. 最高限价、上限价
|
||
4. 拨款控制价、控制价
|
||
5. 合同估算价、预算金额
|
||
|
||
请直接返回金额,带上单位(万元或元)。
|
||
示例:1234.56万元、2466285元
|
||
|
||
如果未提及任何价格信息,请返回"文档未提及"。""",
|
||
|
||
"最高投标限价": """请从招标文件中提取最高投标限价(或招标控制价)。
|
||
|
||
查找关键词:最高投标限价、招标控制价、最高限价、上限价、控制价、包干总价
|
||
|
||
请直接返回金额,带上单位(万元或元)。
|
||
示例:1234.56万元、2466285元
|
||
|
||
如果未提及,请返回"文档未提及"。""",
|
||
|
||
"预估金额": """请从文档中提取项目预估金额。
|
||
|
||
查找关键词:预估金额、预计投资、估算金额、预算金额、项目总投资
|
||
|
||
请直接返回金额,带上单位(万元或元)。
|
||
示例:1234.56万元、2466285元
|
||
|
||
如果未提及,请返回"文档未提及"。""",
|
||
|
||
"投标截止日": """请从招标文件中提取投标截止时间。
|
||
|
||
搜索关键词:投标截止时间、投标截止日、截止时间、开标时间、递交截止时间
|
||
|
||
重要规则:
|
||
1. 绝对禁止推测或编造日期
|
||
2. 如实提取文档中的原始日期
|
||
3. 日期完整则返回标准格式 YYYY-MM-DD
|
||
4. 日期不完整则返回原始格式
|
||
5. 如果遇到日期范围(如"2026年3月1日至3月10日"),请提取最后一个日期作为投标截止日
|
||
|
||
如果未提及,请返回"文档未提及"。""",
|
||
|
||
"招标人": """请从招标文件中提取招标人信息。
|
||
|
||
查找关键词:招标人、招标单位、业主单位、建设单位
|
||
|
||
请直接返回招标人名称,不要其他解释。
|
||
如果未提及,请返回"文档未提及"。""",
|
||
|
||
"造价付款方式": """请从招标文件的合同条款中提取付款方式信息。
|
||
|
||
查找章节:合同条款、通用条款、专用条款、付款方式、工程款支付
|
||
|
||
必须提取以下四项(只提取百分比数字):
|
||
1. 预付款比例
|
||
2. 进度款支付比例
|
||
3. 结算款比例
|
||
4. 质保金比例
|
||
|
||
输出格式:预付款XX%,进度款XX%,结算款XX%,质保金XX%
|
||
|
||
如果某项未提及用"无"代替。
|
||
如果确实未找到付款相关内容,请返回"文档未提及"。""",
|
||
|
||
"招标时间": """请从文档中提取计划招标时间。
|
||
|
||
查找关键词:计划招标时间、预计招标时间、招标时间、计划开标时间、预计开标时间
|
||
|
||
请直接返回招标时间,不要其他解释。
|
||
如果未找到,请返回"文档未提及"。""",
|
||
|
||
"招标估算金额": """请从招标公告中提取项目的估算金额。
|
||
|
||
查找关键词:估算金额、预计投资、预算金额、项目总投资、招标估算价、投资估算
|
||
|
||
请直接返回金额,带上单位(万元或元)。
|
||
示例:1234.56万元、2466285元
|
||
|
||
如果未提及,请返回"文档未提及"。""",
|
||
}
|
||
|
||
# ============ 简道云配置 ============
|
||
|
||
JDY_CONFIG = {
|
||
"api_key": os.environ.get("JDY_API_KEY", ""),
|
||
"forms": {
|
||
|
||
"台州招标计划": {
|
||
"app_id": "6965f35749afd00072b33c4a",
|
||
"entry_id": "6965f35a962fab0113b87876",
|
||
"field_mapping": {
|
||
"项目发布时间": "_widget_1768289120174",
|
||
"批准文号": "_widget_1768289120166",
|
||
"名称": "_widget_1768289120167",
|
||
"类型": "_widget_1768289120168",
|
||
"招标时间": "_widget_1768289120169",
|
||
"预估金额": "_widget_1768289120170",
|
||
"公告链接": "_widget_1768349415371",
|
||
"招标阶段": "_widget_1768289432065",
|
||
},
|
||
},
|
||
"浙江招标文件公示": {
|
||
"app_id": "6965f35749afd00072b33c4a",
|
||
"entry_id": "6965f50e955c9b638888e7d2",
|
||
"field_mapping": {
|
||
"发布时间": "_widget_1768289557651",
|
||
"批准文号": "_widget_1768289557665",
|
||
"名称": "_widget_1768349686082",
|
||
"类型": "_widget_1768289557652",
|
||
"地区": "_widget_1768289557653",
|
||
"投标截止日": "_widget_1768289557654",
|
||
"最高投标限价": "_widget_1768289557655",
|
||
"最高限价": "_widget_1768289557655",
|
||
"资质要求": "_widget_1768289557656",
|
||
"业绩要求": "_widget_1768289557657",
|
||
"评标办法": "_widget_1768289557658",
|
||
"评分说明与资信评分标准": "_widget_1768289557659",
|
||
"有无答辩": "_widget_1768289557660",
|
||
"招标人": "_widget_1768289557661",
|
||
"项目概况": "_widget_1768289557663",
|
||
"造价付款方式": "_widget_1768289557664",
|
||
"招标文件链接": "_widget_1768290058232",
|
||
"招标阶段": "_widget_1768289909408",
|
||
},
|
||
},
|
||
"浙江招标公告": {
|
||
"app_id": "6965f35749afd00072b33c4a",
|
||
"entry_id": "69703283d126285ded9ac1be",
|
||
"field_mapping": {
|
||
"发布时间": "_widget_1768289557651",
|
||
"批准文号": "_widget_1768289557665",
|
||
"名称": "_widget_1768349686082",
|
||
"投标截止日": "_widget_1768289557654",
|
||
"招标估算金额": "_widget_1771910059524",
|
||
"公告链接": "_widget_1768290058232",
|
||
"招标阶段": "_widget_1768289909408",
|
||
},
|
||
},
|
||
"浙江澄清修改": {
|
||
"app_id": "6965f35749afd00072b33c4a",
|
||
"entry_id": "697085af8e631aae04bb856c",
|
||
"field_mapping": {
|
||
"发布时间": "_widget_1768289557651",
|
||
"批准文号": "_widget_1768289557665",
|
||
"名称": "_widget_1768349686082",
|
||
"澄清文件链接": "_widget_1768290058232",
|
||
"招标阶段": "_widget_1768289909408",
|
||
},
|
||
},
|
||
},
|
||
}
|