企查查api接⼝批量操作实战
最近博主因为⼯作需要,需要对⼀些企业的⼯商信息进⾏验证,想来也只有企查查能够提供这样的服务。但是第⼀次使⽤企查查的api还是很呆萌的,不过经过对api⽂档的理解(这⾥就不吐槽企查查的技术⽀持了,完全是虚设的,零回复)以及反复的摸索最后还是成功跑通。下⾯就从零开始讲述博主的⼼路历程:
1、了解需求,申请接⼝。
博主想要通过企业的统⼀信⽤代码或者企业名称查询企业的注册地址,所以申请的企业⼯商数据⾥⾯的企业关键字精确获取详细信息(Basic)。如果有别的需要,另外申请就可以了。在我的接⼝⾥⾯有我的key和我的密钥,注意,这两个后⾯东西会⽤到。
2、了解请求参数设置以及返回数据的格式
多说⽆益,直接看图说话。
1)这⾥请求参数中key就是我的key
keyword就是查询的关键字(企业名称、注册号、社会统⼀信⽤代码)
权限验证这⾥有点复炸,当初博主在这⾥也是愣了好久,现在想来其实挺简单的。其实就是构造⼀个请求头,请求头⾥⾯有两个字段,⼀个是 Token,另⼀个是Timespan。
Timespan就是精确到秒的时间戳。
Token就是将我的key、精确到秒的时间戳、我的密钥三个东西拼接,然后使⽤md5加密算法进⾏加密,加完密之后再所有字符串全部转化为⼤写。
2)返回的数据⼀般分两种,有些接⼝只返回json格式的数据。我们直接解析提取相应格式获取数据就可以。
3、代码实现
import json
import time
from hashlib import md5
请求头的构造:
---------------
#获取时间戳
def get_time_tup():
"""
:return: 13位精确到秒的时间戳
"""
time_tup=str(int(time.time()))
return time_tup
--------------------
#md5加密
def set_md5(s):
"""
:param s: 拼接的字符串
:return: md5加密再转化为⼤写的字符串
"""
new_md5 = md5()
new_md5.de(encoding='utf-8'))    s_md5 = new_md5.hexdigest().upper()
return  s_md5
----------------------#设置请求头
def get_headers(key,screat_key):
"""
:param key: 我的key
:
param screat_key: 我的密钥
:return: 请求头
"""
headers=dict()
token=key+get_time_tup()+screat_key
headers["Token"]=set_md5(token)
headers["Timespan"]=get_time_tup()
return headers
---------------
def get_data(codes,name,key,screat_key):
"""
:
param codes: 关键字的可迭代对象
:param name: 存储⽂档的署名
:param key:  我的key
:param screat_key: 我的密钥
:return:  ⽆
"""
with open(f"data_{name}.csv", "w") as f,open(f"error_data_{name}.csv","w") as f2:
count=0
count_true = 0
count_false = 0
for code in codes:
try:
count+=1
url = f"api.qichacha/ECIV4/GetBasicDetailsByName?key={key}&keyword={code}"
(url=url,headers=get_headers(key,screat_key))百度api接口
m=json.loads(t)
print(m)
if m["Status"]=="200":
x=m["Result"]
f.write(str(x["KeyNo"])+'~'+str(x["Name"])+'~'
+str(x["No"]) + '~'+str(x["BelongOrg"]) + '~'
+str(x["OperName"]) + '~'+str(x["StartDate"]) + '~'
+str(x["EndDate"]) + '~' +str(x["Status"]) + '~'
+str(x["Province"])+ '~' +str(x["UpdatedDate"]) + '~'
+str(x["CreditCode"]) + '~'+str(x["RegistCapi"]) + '~'
+str(x["EconKind"]) + '~'+str(x["Address"]) + '~'
+str(x["Scope"]) + '~' +str(x["TermStart"]) + '~'
+str(x["TeamEnd"])+ '~'+str(x["CheckDate"]) + '~'
+str(x["OrgNo"]) + '~'+str(x["IsOnStock"]) + '~'
+str(x["StockNumber"]) + '~'+str(x["StockType"])
+"\n")
count_true += 1
else:
f2.write(code)
f2.write("\n")
count_false+=1
except :
f2.write(code)
f2.write("\n")
count_false+=1
print("匹配到的数据",count_true)
print("未匹配到的数据",count_false)
print("数据总数",count)
if __name__ == '__main__':
#此处需要⾃⼰调整
codes=data["企业名称"]
key=我的key
screat_key=  我的密钥
get_data(codes, "example", key, screat_key)
创建表格存储,这⾥分为两个表存储,因为有⼀些关键字⽆法匹配到数据,需要将这些关键字记录下来,⽅便后续处理,同时统计⼀下匹配和未匹配的数量。
最后使⽤python⾥⾯的pandas,读取相应的csv⽂件,再与原始数据关联就⾏了。