简介:本文详细介绍如何使用Python调用天眼查API实现企业信息查询,涵盖API接入流程、参数配置、错误处理及代码示例,助力开发者快速构建企业信息检索系统。
天眼查作为国内领先的企业信息查询平台,其API接口为开发者提供了结构化、高时效的企业数据服务。相较于网页爬取,API调用具有三大核心优势:
典型应用场景包括:
API密钥申请:
开发环境配置:
# 推荐使用requests库处理HTTP请求pip install requests# 数据解析建议使用pandaspip install pandas
天眼查API采用HMAC-SHA256签名认证机制:
import hmacimport hashlibimport base64import timefrom urllib.parse import quotedef generate_sign(secret, method, path, params, timestamp):raw_str = f"{method}\n{path}\n{params}\n{timestamp}"secret_bytes = secret.encode('utf-8')raw_bytes = raw_str.encode('utf-8')sign = hmac.new(secret_bytes, raw_bytes, hashlib.sha256).digest()return base64.b64encode(sign).decode('utf-8')# 示例调用api_key = "your_api_key"api_secret = "your_api_secret"timestamp = str(int(time.time()))path = "/api/company/search"params = "keyword=阿里巴巴"method = "GET"sign = generate_sign(api_secret, method, path, params, timestamp)
import requestsdef search_company(keyword, page=1, size=10):url = "https://api.tianyancha.com/api/company/search"headers = {"X-TYC-APIKEY": api_key,"X-TYC-TIMESTAMP": timestamp,"X-TYC-SIGN": sign,"Content-Type": "application/json"}params = {"keyword": keyword,"page": page,"size": size}try:response = requests.get(url, headers=headers, params=params)response.raise_for_status()return response.json()except requests.exceptions.RequestException as e:print(f"请求失败: {e}")return None# 示例:搜索包含"腾讯"的企业result = search_company("腾讯")
def get_company_detail(company_id):url = f"https://api.tianyancha.com/api/company/{company_id}"headers = {"X-TYC-APIKEY": api_key,"X-TYC-TIMESTAMP": str(int(time.time())),# 需重新生成签名"X-TYC-SIGN": generate_sign(api_secret, "GET", f"/api/company/{company_id}", "", str(int(time.time()))),}try:response = requests.get(url, headers=headers)response.raise_for_status()return response.json()except requests.exceptions.RequestException as e:print(f"获取详情失败: {e}")return None# 示例:获取企业ID为123456的详情detail = get_company_detail("123456")
import pandas as pdfrom concurrent.futures import ThreadPoolExecutordef batch_search(keywords, max_workers=5):results = []with ThreadPoolExecutor(max_workers=max_workers) as executor:futures = [executor.submit(search_company, kw) for kw in keywords]for future in futures:data = future.result()if data:results.extend(data.get("items", []))return pd.DataFrame(results)# 示例:批量查询多个关键词keywords = ["字节跳动", "美团", "京东"]df = batch_search(keywords)
import sqlite3def save_to_db(company_data):conn = sqlite3.connect("company_data.db")cursor = conn.cursor()cursor.execute("""CREATE TABLE IF NOT EXISTS companies (id TEXT PRIMARY KEY,name TEXT,legal_person TEXT,registered_capital TEXT,establish_date TEXT,business_status TEXT)""")for item in company_data.get("items", []):cursor.execute("""INSERT OR REPLACE INTO companies VALUES (?,?,?,?,?,?)""", (item["id"],item["name"],item["legalPersonName"],item["registeredCapital"],item["establishTime"],item["businessStatus"]))conn.commit()conn.close()# 示例:保存搜索结果search_result = search_company("华为")if search_result:save_to_db(search_result)
解决方案:
def safe_request(func, max_retries=3):
for i in range(max_retries):try:return func()except HTTPError as e:if e.response.status_code == 429 and i < max_retries - 1:sleep_time = (i + 1) * 2time.sleep(sleep_time)else:raise
```
def parse_company_data(raw_data):try:if not raw_data or "code" not in raw_data or raw_data["code"] != 0:raise ValueError("无效的响应数据")company = {"name": raw_data["data"]["name"],"legal_person": raw_data["data"].get("legalPersonName", "未知"),"status": raw_data["data"]["businessStatus"],"shareholders": [{"name": s["name"], "ratio": s["stockPercent"]}for s in raw_data["data"].get("stockHolders", [])]}return companyexcept (KeyError, TypeError) as e:print(f"数据解析错误: {e}")return None
缓存策略:
错误监控:
数据更新机制:
安全规范:
通过Python调用天眼查API,开发者可以高效构建企业信息查询系统。关键实施要点包括:
未来随着企业数据服务的发展,建议关注:
通过系统化的API调用方案,开发者能够为企业风控、供应链管理等场景提供可靠的数据支持,创造显著的业务价值。