中控网 item_search 接口是按关键词批量检索企业列表的核心接口,支持通过行业、产品、地域、资质等关键词,快速筛选目标企业群体,返回企业基础信息、联系方式、核心业务等摘要数据,广泛应用于供应商挖掘、客户开发、市场调研、行业分析等场景。
一、接口核心认知:先明确 “能做什么”“怎么用”
1. 接口定位与核心价值
2. 核心参数与返回字段(电子行业适配版)
(1)请求参数(必填 + 可选,重点适配工业 / 电子场景)
(2)返回核心字段(按业务场景分类)
3. 接口限制与注意事项
二、对接前准备:3 步搞定前置条件
1. 注册与获取密钥(核心步骤)
2. 技术环境准备
(1)支持语言与框架
(2)必备工具与依赖
3. 业务需求梳理
三、实操步骤:从调试到落地(Python 示例)
步骤 1:理解请求流程
步骤 2:签名生成规则(关键!避免调用失败)
签名示例(参数排序与拼接)
步骤 3:完整代码实现(Python)
(1)依赖安装
pip install requests pandas # requests用于请求,pandas用于数据整理
(2)完整代码(含签名生成、分页获取、数据保存)
import requests
import hashlib
import time
import pandas as pd
from urllib.parse import urlencode
from typing import List, Dict, Optional
# 接口核心配置(替换为自己的密钥和接口地址)
APP_KEY = "你的appkey"
SECRET = "你的secret"
API_URL = "https://api.zhongkong.com/item_search" # 正式接口地址
SAVE_PATH = "电子行业企业列表.xlsx" # 结果保存路径
def generate_sign(params: Dict) -> str:
"""生成接口签名(核心步骤,严格按规则实现)"""
# 1. 按参数名ASCII升序排序(排除sign字段)
sorted_params = sorted(params.items(), key=lambda x: x[0])
# 2. 拼接参数字符串(urlencode自动处理空格、中文等特殊字符)
param_str = urlencode(sorted_params, encoding="utf-8") + f"&secret={SECRET}"
# 3. MD5加密(32位大写)
md5 = hashlib.md5()
md5.update(param_str.encode("utf-8"))
return md5.hexdigest().upper()
def get_company_list(
keywords: str,
page_no: int = 1,
page_size: int = 50,
industry_id: Optional[str] = None,
region: Optional[str] = None,
qualification: Optional[str] = None
) -> Dict:
"""
调用item_search接口获取企业列表(单页)
:param keywords: 搜索关键词
:param page_no: 页码
:param page_size: 每页条数
:param industry_id: 行业ID
:param region: 地域筛选
:param qualification: 资质筛选
:return: 接口响应结果(JSON格式)
"""
# 1. 构建基础参数(必填项)
params = {
"appkey": APP_KEY,
"keywords": keywords,
"page_no": page_no,
"page_size": page_size,
"timestamp": int(time.time() * 1000), # 毫秒级时间戳
"fields": "company_id,credit_code,name,short_name,industry,region,contact,qualification,business_status,established_date"
}
# 2. 添加可选参数(非必填项,按需添加)
if industry_id:
params["industry_id"] = industry_id
if region:
params["region"] = region
if qualification:
params["qualification"] = qualification
# 3. 生成签名(必须在所有参数拼接完成后生成)
params["sign"] = generate_sign(params)
try:
# 4. 发送GET请求(HTTPS协议,超时设置10秒)
response = requests.get(
url=API_URL,
params=params,
timeout=10,
verify=True # 生产环境开启SSL验证,测试环境可设为False
)
# 5. 解析响应(JSON格式)
result = response.json()
# 6. 处理响应状态
if result.get("code") == 200:
return {
"success": True,
"data": result.get("data", {}).get("list", []), # 企业列表
"total": result.get("data", {}).get("total", 0), # 总匹配数
"page_no": page_no,
"page_size": page_size
}
else:
return {
"success": False,
"error_code": result.get("code"),
"error_msg": result.get("msg")
}
except requests.exceptions.RequestException as e:
# 网络异常(超时、连接失败等)
return {
"success": False,
"error_code": -1,
"error_msg": f"网络异常:{str(e)}"
}
except Exception as e:
# 其他异常(JSON解析失败等)
return {
"success": False,
"error_code": -2,
"error_msg": f"处理异常:{str(e)}"
}
def batch_get_company_list(
keywords: str,
max_page: int = 100,
industry_id: Optional[str] = None,
region: Optional[str] = None,
qualification: Optional[str] = None
) -> List[Dict]:
"""
批量获取企业列表(自动分页,直到获取所有数据或达到最大页数)
:return: 所有页的企业数据列表
"""
all_companies = []
page_no = 1
total_count = 0
print(f"开始获取关键词「{keywords}」的企业列表...")
while page_no <= max_page:
# 调用单页接口
result = get_company_list(
keywords=keywords,
page_no=page_no,
page_size=50,
industry_id=industry_id,
region=region,
qualification=qualification
)
if not result["success"]:
print(f"第{page_no}页获取失败:{result['error_msg']}(错误码:{result['error_code']})")
# 频率超限或服务器异常,重试1次
if result["error_code"] in [429, 500]:
time.sleep(10)
continue
break
# 提取当前页数据
current_page_data = result["data"]
if not current_page_data:
print(f"第{page_no}页无数据,停止获取")
break
all_companies.extend(current_page_data)
total_count = result["total"]
print(f"第{page_no}页获取成功,累计获取{len(all_companies)}/{total_count}条")
# 计算是否还有下一页(总数据量 <= 已获取数据量则停止)
if len(all_companies) >= total_count:
print(f"已获取全部数据(共{total_count}条)")
break
# 分页间隔(避免频率超限,免费版建议3-5秒,企业版1-2秒)
time.sleep(3)
page_no += 1
return all_companies
def save_company_data(companies: List[Dict], save_path: str):
"""将企业列表保存为Excel文件(便于后续分析)"""
if not companies:
print("无数据可保存")
return
# 转换为DataFrame(筛选常用字段,规范列名)
df = pd.DataFrame(companies)[[
"company_id", "credit_code", "name", "short_name", "industry",
"region", "business_status", "established_date", "contact"
]]
# 列名映射(更易读)
df.columns = [
"企业ID", "统一社会信用代码", "企业名称", "简称", "所属行业",
"地域", "经营状态", "成立日期", "联系方式"
]
# 保存Excel(支持xlsx/csv格式)
df.to_excel(save_path, index=False, engine="openpyxl")
print(f"数据已保存至:{save_path}(共{len(df)}条记录)")
# 主函数:调用示例(电子行业供应商挖掘)
if __name__ == "__main__":
# 配置搜索条件(电子元件供应商筛选)
SEARCH_KEYWORDS = "电子元件 车规级 RoHS"
INDUSTRY_ID = "102" # 电子制造行业ID(需从平台获取)
REGION = "广东省 深圳市" # 地域筛选
QUALIFICATION = "ISO9001,RoHS,高新技术企业" # 资质筛选
# 批量获取企业列表
company_list = batch_get_company_list(
keywords=SEARCH_KEYWORDS,
industry_id=INDUSTRY_ID,
region=REGION,
qualification=QUALIFICATION
)
# 保存数据
if company_list:
save_company_data(company_list, SAVE_PATH)
else:
print("未获取到符合条件的企业数据")