企查查api接口批量操作实战

最近博主因为工作需要,需要对一些企业的工商信息进行验证,想来也只有企查查能够提供这样的服务。但是第一次使用企查查的api还是很呆萌的,不过经过对api文档的理解(这里就不吐槽企查查的技术支持了,完全是虚设的,零回复)以及反复的摸索最后还是成功跑通。下面就从零开始讲述博主的心路历程:

1、了解需求,申请接口。

博主想要通过企业的统一信用代码或者企业名称查询企业的注册地址,所以申请的企业工商数据里面的企业关键字精确获取详细信息(Basic)。如果有别的需要,另外申请就可以了。在我的接口里面有我的key和我的密钥,注意,这两个后面东西会用到。

2、了解请求参数设置以及返回数据的格式

多说无益,直接看图说话。

1)这里请求参数中key就是我的key

keyword就是查询的关键字(企业名称、注册号、社会统一信用代码)

权限验证这里有点复炸,当初博主在这里也是愣了好久,现在想来其实挺简单的。其实就是构造一个请求头,请求头里面有两个字段,一个是 Token,另一个是Timespan。

Timespan就是精确到秒的时间戳。

Token就是将我的key、精确到秒的时间戳、我的密钥三个东西拼接,然后使用md5加密算法进行加密,加完密之后再所有字符串全部转化为大写。

2)返回的数据一般分两种,有些接口只返回json格式的数据。我们直接解析提取相应格式获取数据就可以。

3、代码实现

import requests
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.update(s.encode(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"http://api.qichacha.com/ECIV4/GetBasicDetailsByName?key={key}&keyword={code}"
              s=requests.get(url=url,headers=get_headers(key,screat_key))
              t=s.text
              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文件,再与原始数据关联就行了。

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页