前言 化工 B2B 场景和普通电商不一样,检索结果混杂推广商家、普通供应商、过期供应信息,直接拉取原始数据很难用于采购筛选。本文的思路不只是简单请求拿数据,而是增加供应商类型标记、过期供应过滤、字段归一化,适配化工行业采购商批量摸排供应商的业务需求,适合做供应链台账、供应商初选场景。 依赖 requests 与 json,执行安装: 这段封装重点做了三层处理:重试容错、业务过滤、字段扁平化。化工网供应商检索返回字段杂乱,同时混有付费推广条目,这类数据对采购参考价值低,所以增加 关键词支持化学品名、CAS 号两种检索方式,CAS 检索精度更高,供应商匹配更精准; 该站点有访问频次限制,批量轮询分页时,间隔建议大于 1.5 秒; 部分企业隐藏联系方式,返回 contact 字段为空,业务侧需要做空值兼容; 检索结果的更新时间代表供应信息发布时间,优先选取近期更新的供应商,减少无效线索。 这套方案偏向化工供应链业务使用,优先保证有效供应商线索,而不是全量原始数据。对于需要定期摸排原料供应商、批量做市场比价台账的场景,可在此基础上增加导出 csv、地区筛选功能,适配采购部门自动化线索收集需求。环境准备
pip install requests

点击获取key和secret
核心代码示例
import requests
import time
class ChemnetSupplierSearch:
def __init__(self):
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Accept": "application/json, text/plain, */*"
}
self.timeout = 10
self.max_retry = 2
def search_supplier(self, keyword, page=1):
params = {
"keyword": keyword,
"page": page,
"size": 20
}
for i in range(self.max_retry):
try:
res = requests.get(
"https://cn.chemnet.com/search/supplier",
headers=self.headers,
params=params,
timeout=self.timeout
)
res.raise_for_status()
raw_data = res.json()
return self.data_filter(raw_data)
except Exception as e:
time.sleep(1.5)
continue
return []
def data_filter(self, raw):
result_list = []
for item in raw.get("list", []):
# 过滤过期供应、竞价推广数据
if item.get("is_expire") or item.get("is_ad") == 1:
continue
info = {
"company_name": item.get("company_name"),
"main_product": item.get("main_product"),
"contact": item.get("contact"),
"region": item.get("area"),
"supply_id": item.get("id"),
"update_time": item.get("update_time")
}
result_list.append(info)
return result_list
if __name__ == "__main__":
search_client = ChemnetSupplierSearch()
data = search_client.search_supplier("二甲基亚砜", page=1)
for row in data:
print(row)方案解读
is_ad、过期状态过滤逻辑,减少下游数据清洗工作量。 不同于电商商品检索,化工供应商核心关注主营产品、所在地、更新时间,代码里只保留业务刚需字段,避免冗余数据占用存储。分页逻辑可循环调用,循环时建议加长间隔,避免访问频次过高。落地避坑要点
总结