此文章已同步更新至我的个人博客https://simonting.gitee.io
调用企查查的API获取一万多家公司股东信息数据导出为excel文件。
IP获取建议使用百度搜索:
替换程序中的我的key及我的密钥
companyName.xlsx样例:
将excel放在程序同一目录下,修改文件名为companyName.xlsx,也可以修改代码中的文件名为你的excel文件名,建议文件名为全英文。
前提:
1、安装python3.0以上:https://www.runoob.com/python3/python3-install.html
2、安装代码使用到的函数库:
3、复制代码保存为main.py
4、运行代码,python main.py ,如果安装过pycharm之类的IDE工具可以使用工具。
# -*- coding: UTF-8 -*-
# !/usr/bin/python
# pip3 install requests
# pip3 install xlrd
import hashlib
import json
import os
import csv
import time
import requests
import xlrd
# 我的key
appKey = ''
# 我的密钥
secKey = ''
encode = 'utf-8'
# Http请求头设置
timespan = str(int(time.time()))
token = appKey + timespan + secKey
hl = hashlib.md5()
hl.update(token.encode(encoding=encode))
token = hl.hexdigest().upper()
file_path = 'data.csv'
# 数据获取
def get_data(company_name):
url = 'http://api.qichacha.com/ECIPartner/GetList?pageIndex=1&pageSize=20&key=' + appKey + '&searchKey=' \
+ company_name
print('开始获取' + company_name + '的股东数据...')
print("请求url为:" + url)
headers = {'Token': token, 'Timespan': timespan}
response = requests.get(url, headers=headers)
if response is None:
print(company_name + "的数据查询异常!")
return get_default_data()
result_json = json.dumps(str(response.content, encoding=encode))
result_json = result_json.encode(encode).decode("unicode-escape")
data = json.loads(result_json[1:-1])
if data['Status'] != '200':
print(company_name + '的数据获取失败!原因:' + data['Message'])
return get_default_data()
print(company_name + '数据获取成功!')
print('源数据为:' + str(data))
return data
def get_default_data():
json_str = '{"Paging":{"TotalRecords":0},"Result":[{"StockName":"-","StockType":"-","StockPercent":"-","ShouldCapi":"-","ShoudDate":"-"}]}'
return json.loads(json_str)
# 向csv文件内写数据
def write_data_2_csv(index, data, company_name):
total = data['Paging']['TotalRecords']
items = data['Result']
print(company_name + "共获取到" + str(total) + '条股东信息数据')
print('开始写入' + company_name + '的数据...')
csv_file = open(file_path, 'a+', newline='')
try:
writer = csv.writer(csv_file)
if index == 0:
header = ('公司名称', '股东', '类型', '占比', '出资金额(万)', '出资时间')
writer.writerow(header)
for item in items:
row = (company_name, item['StockName'],
item['StockType'], item['StockPercent'],
item['ShouldCapi'], item['ShoudDate'])
writer.writerow(row)
print('写入' + company_name + '的数据完毕。')
finally:
csv_file.close()
# 删除已存在的data.csv
def pre_exec():
if os.path.exists(file_path):
os.remove(file_path)
def main():
print('程序执行开始...')
pre_exec()
company = xlrd.open_workbook('companyName.xlsx').sheet_by_index(0)
for i in range(company.nrows):
company_name = str(company.row_values(i)[0])
data = get_data(company_name)
write_data_2_csv(i, data, company_name)
print('程序执行结束。')
if __name__ == '__main__':
main()