基金业协会备案信息之:基金管理人
模块引入
import requests
import pandas as pd
import random
import math
import time
import datetime
from sqlalchemy import create_engine
from lxml import etree
import re
requests.__version__
# '2.18.4'
基金管理人列表
chrome
打开network
查看请求,具体请求API为 POST,接口:http://gs.amac.org.cn/amac-infodisc/api/pof/manager
,参数:?rand=0.24323480064904235&page=1&size=20
- rand:0-1随机数
- page:页码(第1页:page=0)
- size:每页显示的记录数
参数说明:
- Query String Parameters: params,查询参数
- Request Payload: json,为空{}时,也需要添加该参数,否则有可能报错
# url = 'http://gs.amac.org.cn/amac-infodisc/api/pof/manager?rand=0.24121315630506435&page=0&size=20'
url = 'http://gs.amac.org.cn/amac-infodisc/api/pof/manager'
paras = {"rand": 0.24121315630506435,
"page": 4,
"size": 2}
headers = {
'Content-Type': 'application/json'
}
rs = requests.post(url=url, headers=headers, params = paras, json={})
print(rs.url)
print(rs.text)
http://gs.amac.org.cn/amac-infodisc/api/pof/manager?rand=0.24121315630506435&page=4&size=2
{"content":[{"id":"101000000446","managerName":"鼎晖股权投资管理(天津)有限公司","artificialPersonName":"吴尚志","registerNo":"P1000301","establishDate":1211414400000,"managerHasProduct":null,"url":"101000000446.html","registerDate":1395014400000,"registerAddress":"天津市滨海新区滨海新区经济技术开发区南港工业区综合服务区办公楼D座二层202室(开发区金融服务中心托管第77号)","registerProvince":"天津市","registerCity":"滨海新区","regAdrAgg":"天津市","fundCount":12,"fundScale":1381634.712859,"paidInCapital":2049953.1490,"subscribedCapital":2642307.0000,"hasSpecialTips":false,"inBlacklist":false,"hasCreditTips":false,"regCoordinate":null,"officeCoordinate":"39.92271378228864,116.46714895633674","officeAddress":"北京市朝阳区朝阳区东三环中路5号财富金融中心25层","officeProvince":"北京市","officeCity":"朝阳区","primaryInvestType":"私募股权、创业投资基金管理人"},{"id":"101000000308","managerName":"广东中科招商创业投资管理有限责任公司","artificialPersonName":"杜昌焘","registerNo":"P1000302","establishDate":1247616000000,"managerHasProduct":null,"url":"101000000308.html","registerDate":1395014400000,"registerAddress":"广东省广州市萝岗区广州高新技术产业开发区科学大道235号1001房之八","registerProvince":"广东省","registerCity":"广州市","regAdrAgg":"广东省","fundCount":27,"fundScale":1111650.707103,"paidInCapital":972690.4115,"subscribedCapital":979315.4115,"hasSpecialTips":false,"inBlacklist":false,"hasCreditTips":false,"regCoordinate":"23.17761537939722,113.463880297835","officeCoordinate":"23.123979636327483,113.32975831850844","officeAddress":"广东省广州市天河区天河区珠江新城珠江西路5号广州国际金融中心西塔21层","officeProvince":"广东省","officeCity":"广州市","primaryInvestType":"私募股权、创业投资基金管理人"}],"last":false,"totalPages":11631,"totalElements":23262,"sort":[{"direction":"ASC","property":"registerDate","ignoreCase":false,"nullHandling":"NATIVE","ascending":true,"descending":false}],"size":2,"number":4,"first":false,"numberOfElements":2}
结果转化为pandas.DataFrame类型
dict_dat = rs.json()
df_pd = pd.DataFrame.from_dict(dict_dat['content'])
df_pd
artificialPersonName | establishDate | fundCount | fundScale | hasCreditTips | hasSpecialTips | id | inBlacklist | managerHasProduct | managerName | ... | primaryInvestType | regAdrAgg | regCoordinate | registerAddress | registerCity | registerDate | registerNo | registerProvince | subscribedCapital | url | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 吴尚志 | 1211414400000 | 12 | 1.381635e+06 | False | False | 101000000446 | False | None | 鼎晖股权投资管理(天津)有限公司 | ... | 私募股权、创业投资基金管理人 | 天津市 | None | 天津市滨海新区滨海新区经济技术开发区南港工业区综合服务区办公楼D座二层202室(开发区金融服... | 滨海新区 | 1395014400000 | P1000301 | 天津市 | 2.642307e+06 | 101000000446.html |
1 | 杜昌焘 | 1247616000000 | 27 | 1.111651e+06 | False | False | 101000000308 | False | None | 广东中科招商创业投资管理有限责任公司 | ... | 私募股权、创业投资基金管理人 | 广东省 | 23.17761537939722,113.463880297835 | 广东省广州市萝岗区广州高新技术产业开发区科学大道235号1001房之八 | 广州市 | 1395014400000 | P1000302 | 广东省 | 9.793154e+05 | 101000000308.html |
2 rows × 25 columns
加入日期范围筛选
date_range = {"establishDate": {"from": "2017-11-02", "to": "2018-02-02"}}
paras = {"rand": random.random(),
"page": 0,
"size": 4}
rs = requests.post(url=url, headers=headers, params = paras,
json=date_range)
print(rs.url)
dict_dat = rs.json()
df_pd = pd.DataFrame.from_dict(dict_dat['content'])
df_pd
http://gs.amac.org.cn/amac-infodisc/api/pof/manager?rand=0.9056699244551177&page=0&size=4
artificialPersonName | establishDate | fundCount | fundScale | hasCreditTips | hasSpecialTips | id | inBlacklist | managerHasProduct | managerName | ... | primaryInvestType | regAdrAgg | regCoordinate | registerAddress | registerCity | registerDate | registerNo | registerProvince | subscribedCapital | url | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 张志良 | 1510704000000 | 0 | 0 | False | False | 1711221511103201 | False | False | 北京屹唐联合投资管理有限公司 | ... | 私募股权、创业投资基金管理人 | 北京市 | 39.79008460858685,116.5313401936383 | 北京市大兴区大兴区北京市北京经济技术开发区荣昌东街甲5号3号楼7层701-3室 | 大兴区 | 1514505600000 | P1066606 | 北京市 | 0.0 | 1711221511103201.html |
1 | 黎代福 | 1510185600000 | 0 | 0 | False | False | 1711201409106565 | False | False | 深圳市建信远致投贷联动股权投资基金管理有限公司 | ... | 私募股权、创业投资基金管理人 | 深圳市 | 22.54423473206776,114.06008610208522 | 广东省深圳市福田区福田街道深南大道4009投资大厦14A | 深圳市 | 1515456000000 | P1066724 | 广东省 | 0.0 | 1711201409106565.html |
2 | 贾翔宇 | 1509926400000 | 0 | 0 | False | False | 1711151340101418 | False | False | 芜湖元祐投资管理有限公司 | ... | 私募股权、创业投资基金管理人 | 安徽省 | 31.351965582559195,118.38724548573022 | 安徽省芜湖市镜湖区荆峰路60-1号 | 芜湖市 | 1516320000000 | P1066906 | 安徽省 | 0.0 | 1711151340101418.html |
3 | 杜炎斌 | 1510790400000 | 0 | 0 | False | False | 1711232310107506 | False | False | 西藏聚信发展股权投资基金管理有限公司 | ... | 私募股权、创业投资基金管理人 | 西藏自治区 | 29.629444241792186,91.07674760971572 | 西藏自治区拉萨市城关区柳梧新区柳梧大厦1602号 | 拉萨市 | 1516320000000 | P1066927 | 西藏自治区 | 0.0 | 1711232310107506.html |
4 rows × 25 columns
基金管理人基本信息
pd.read_html
直接读取<table>
标签下的内容为dataframe- 字段名称的中英文转化
- 无效/空白值的筛选
- 产品列表的提取
class ManagerDetail(object):
def __init__(self):
dfname_dict = {"基金管理人全称(中文):": "manager_namecn",
"基金管理人全称(英文):": "manager_nameen",
"组织机构代码:": "manager_gov_code",
"注册资本(万元)(人民币):": "reg_capital",
"企业性质:": "company_nature",
"员工人数:": "employee_num",
"是否为会员:": "is_vip",
"当前会员类型:": "vip_type",
"法律意见书状态:": "legal_status",
"律师事务所名称:": "legal_name",
"律师姓名:": "lawyer_name",
"法定代表人/执行事务合伙人(委派代表)姓名:": "legal_representname",
"实缴资本(万元)(人民币):": "reg_capital_real",
"注册资本实缴比例:": "reg_capital_pct",
"机构网址:": "gov_website",
"入会时间:": "admission_date",
"机构信息最后更新时间:": "gov_last_update",
"特别提示信息:": "special_info",
"是否有从业资格:": "is_qualify",
"资格取得方式:": "qualify_way",
"业务类型:": "business_type"}
dfname_base = pd.DataFrame()
dfname_base['index_cn'] = list(dfname_dict.keys())
dfname_base['index_en'] = list(dfname_dict.values())
self.url_format = 'http://gs.amac.org.cn/amac-infodisc/res/pof/manager/%s.html'
self.headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'Connection': 'keep-alive',
'Content-Type': 'application/json'
}
self.dfname_base = dfname_base
self.xpath_pro = '//td[@class="td-content"]/p/a'
def get_managerInfo(self, id):
url = self.url_format % id
rs = requests.get(url, headers=self.headers)
# rs.text
rs.encoding = 'UTF-8'
tabs = pd.read_html(rs.text)
# 机构基本信息
tab1 = tabs[0].iloc[2:23, 0:2]
tab2 = tabs[0].iloc[2:23, 2:4]
tab3 = tabs[0]
tab3 = tab3.loc[tab3.iloc[:, 0].isin(['机构信息最后更新时间:', '特别提示信息:'])]
tab3 = tab3.iloc[:, 0:2]
tab3
tab1.columns = ['index_cn', 'val']
tab2.columns = ['index_cn', 'val']
tab3.columns = ['index_cn', 'val']
tab_base = tab1.append(tab2)
tab_base = pd.concat([tab1, tab2, tab3], axis=0, ignore_index=True)
tab_base = tab_base.dropna()
tab_base = pd.merge(self.dfname_base, tab_base, how='left')
tab_base.index = tab_base['index_en']
tab_base = tab_base[['val']]
# tab_base.dropna()
# tab_base
tab_base['val'] = ['' if isinstance(x, float) and math.isnan(x) else x for x in tab_base['val']]
tab_base = tab_base.T
tab_base['manager_namecn'][0] = tab_base['manager_namecn'][0].split(' ')[1]
tab_base['m_id'] = id
## 法定代表人简历
cols_resume = set(['时间', '任职单位', '职务'])
cols_admin = set(['高管姓名', '职务', '是否具有基金从业资格'])
for ti in range(1, len(tabs)):
cols = list(tabs[ti].columns)
if (set(cols) == cols_resume):
tab_resume = tabs[ti]
tab_resume.columns = ['period_date', 'service_company', 'position']
tab_resume['m_id'] = id
## 高管信息
if (set(cols) == cols_admin):
tab_admin = tabs[ti]
tab_admin.columns = ['admin_name', 'position', 'is_passfund']
tab_admin['m_id'] = id
break
## 发行产品list
try:
r1_html = etree.HTML(rs.text)
prodts = r1_html.xpath(self.xpath_pro)
prodt_nm = [re.sub(':|\s', '', x.xpath('string()')) for x in prodts]
prodt_id = [re.findall(r"\d+", x.xpath('@href')[0])[0] for x in prodts]
tab_prodt = pd.DataFrame.from_records([prodt_id, prodt_nm]).T
tab_prodt.columns = ['prodt_id', 'prodt_nm']
tab_prodt['m_id'] = id
except:
tab_prodt = None
res = {
'tab_base': tab_base,
'tab_resume': tab_resume,
'tab_admin': tab_admin,
'tab_prodt': tab_prodt
}
return res
managerdel = ManagerDetail()
managerdel.get_managerInfo(101000000138)
{'tab_admin': admin_name position is_passfund m_id
0 杨晓华 法定代表人 总经理 执行董事 是(资格认定) 101000000138
1 周娟 合规风控 信息填报负责人 是(通过考试) 101000000138
2 张存相 副总经理 是(通过考试) 101000000138
3 瞿立杰 副总经理 是(通过考试) 101000000138,
'tab_base': index_en manager_namecn manager_nameen \
val 平安道远投资管理(上海)有限公司 Ping An DaoYuan Investment Management (Shangha...
index_en manager_gov_code reg_capital company_nature employee_num is_vip \
val 57075680-3 20000 内资企业 34 是
index_en vip_type legal_status legal_name ... reg_capital_real \
val 观察会员 ... 20000
index_en reg_capital_pct gov_website admission_date gov_last_update \
val 100% 2013-05-08 2017-12-18
index_en special_info is_qualify qualify_way business_type m_id
val 是 资格认定 101000000138
[1 rows x 22 columns],
'tab_prodt': prodt_id prodt_nm m_id
0 351000131340 平安资产MOM1号资产管理产品 101000000138
1 351000128351 罗素投资合格投资者中国基金 101000000138
2 351000128367 平安人寿绝对收益账户 101000000138
3 351000128350 交银国信平安罗素MOM一期多元投资集合资金信托计划 101000000138
4 351000144727 平安资产MOM2号保险资产管理产品 101000000138
5 351000144730 平安资产MOM3号保险资产管理产品 101000000138
6 1708101828100786 平安道远投资管理(上海)有限公司*稳盈8号私募投资基金 101000000138
7 1705030955106523 平安道远STAR21号私募基金 101000000138
8 351000411156 平安道远STAR27号私募基金 101000000138
9 351000398101 平安道远STAR19号私募基金 101000000138
10 1709211826109370 平安道远投资管理(上海)有限公司*聚盈9号私募投资基金 101000000138
11 351000337686 平安道远STAR2号私募基金 101000000138
12 351000411159 平安道远STAR28号私募基金 101000000138
13 351000337690 平安道远STAR3号私募基金 101000000138
14 351000398107 平安道远STAR20号私募基金 101000000138
15 351000337693 平安道远STAR4号私募基金 101000000138
16 351000411165 平安道远STAR29号私募基金 101000000138
17 1707061853100889 平安道远投资管理(上海)有限公司安享2号私募投资基金 101000000138
18 351000398083 平安道远STAR17号私募基金 101000000138
19 1708040848102372 平安道远投资管理(上海)有限公司*聚盈7号私募投资基金 101000000138
20 351000411149 平安道远STAR26号私募基金 101000000138
21 1709291511108826 平安道远投资管理(上海)有限公司*聚盈13号私募投资基金 101000000138
22 1710231813105885 平安道远投资管理(上海)有限公司*聚盈14号私募投资基金 101000000138
23 351000398095 平安道远STAR18号私募基金 101000000138
24 1709291511107303 平安道远投资管理(上海)有限公司*聚盈11号私募投资基金 101000000138
25 351000337328 平安道远STAR1号私募基金 101000000138
26 1707311041109446 平安道远投资管理(上海)有限公司*稳盈7号私募投资基金 101000000138
27 351000264901 平安道远金锁2号基金 101000000138
28 1708101828100763 平安道远投资管理(上海)有限公司*聚盈8号私募投资基金 101000000138
29 351000398143 平安道远STAR25号私募基金 101000000138
.. ... ... ...
42 351000398044 平安道远STAR10号私募基金 101000000138
43 351000747226 平安道远投资管理(上海)有限公司稳盈1号私募投资基金 101000000138
44 351000221216 平安养老-平安罗素道远1号资产管理产品 101000000138
45 1706161700108793 平安道远投资管理(上海)有限公司*稳盈3号私募投资基金 101000000138
46 1706231903112165 平安道远投资管理(上海)有限公司*稳盈4号私募投资基金 101000000138
47 1710271905100404 平安道远投资管理(上海)有限公司*稳盈12号私募投资基金 101000000138
48 1712061714104717 平安道远投资管理(上海)有限公司*稳信1号私募投资基金 101000000138
49 351000398027 平安道远STAR8号私募基金 101000000138
50 1709291511109788 平安道远投资管理(上海)有限公司*聚盈12号私募投资基金 101000000138
51 1707061853100052 平安道远投资管理(上海)有限公司安享4号私募投资基金 101000000138
52 1707061853100075 平安道远投资管理(上海)有限公司*安享3号私募投资基金 101000000138
53 351000398070 平安道远STAR15号私募基金 101000000138
54 1710271905100484 平安道远投资管理(上海)有限公司*聚盈16号私募投资基金 101000000138
55 1712061714104763 平安道远投资管理(上海)有限公司*稳信3号私募投资基金 101000000138
56 1712081750117313 平安道远投资管理(上海)有限公司*稳信4号私募投资基金 101000000138
57 1707251826105335 平安道远投资管理(上海)有限公司稳盈6号私募投资基金 101000000138
58 1709211826109393 平安道远投资管理(上海)有限公司*稳盈9号私募投资基金 101000000138
59 1709251754104772 平安道远投资管理(上海)有限公司*稳盈10号私募投资基金 101000000138
60 351000398079 平安道远STAR16号私募基金 101000000138
61 1711021522101444 平安道远投资管理(上海)有限公司*聚盈15号私募投资基金 101000000138
62 1705111733104153 平安道远投资管理(上海)有限公司安享1号私募投资基金 101000000138
63 1707131617101515 平安道远BIGBANG私募基金 101000000138
64 1709291511109173 平安道远投资管理(上海)有限公司*稳盈11号私募投资基金 101000000138
65 1709251754104793 平安道远投资管理(上海)有限公司聚盈10号私募投资基金 101000000138
66 1712061714104740 平安道远投资管理(上海)有限公司*稳信2号私募投资基金 101000000138
67 351000767714 平安道远投资管理(上海)有限公司稳盈2号私募投资基金 101000000138
68 351000398054 平安道远STAR11号私募基金 101000000138
69 1707251826105314 平安道远投资管理(上海)有限公司聚盈5号私募投资基金 101000000138
70 1707311041109392 平安道远投资管理(上海)有限公司*聚盈6号私募投资基金 101000000138
71 351000398063 平安道远STAR12号私募基金 101000000138
[72 rows x 3 columns],
'tab_resume': period_date service_company position m_id
0 2015.09 - 2017.04 平安道远投资管理(上海)有限公司 董事长兼总经理 101000000138
1 2010.10 - 2015.09 平安罗素 董事长兼总经理 101000000138
2 2009.11 - 2010.08 平安香港投资管理公司 董事常务副总 101000000138
3 1999.10 - 2009.10 平安香港保险 董事总经理 101000000138
4 1996.11 - 1999.10 平安香港海外 负责人 101000000138
5 1996.02 - 1996.11 平安总部核赔部 总经理 101000000138
6 1995.03 - 1996.02 平安总部核保部 总经理 101000000138
7 1992.04 - 1995.03 平安总部国际部 总经理 101000000138
8 1989.09 - 1992.04 深圳平安公司对外业务部 副经理 101000000138
9 1987.09 - 1989.09 大连海运学院 教师 101000000138
10 1983.09 - 1985.09 大连海运学院 教师 101000000138}
产品信息提取
class Product(object):
def __init__(self):
dfname_dict = {"基金名称:": "fund_nm",
"基金编号:": "fund_code",
"成立时间:": "establish_date",
"备案时间:": "record_date",
"基金备案阶段:": "record_stage",
"基金类型:": "fund_type",
"币种:": "currency_type",
"基金管理人名称:": "fund_manager",
"管理类型:": "manager_type",
"托管人名称:": "trustee_name",
"运作状态:": "operate_status",
"基金信息最后更新时间:": "last_update",
"基金协会特别提示(针对基金):": "specail_message",
"月报:": "report_month",
"半年报:": "report_halfyear",
"年报:": "report_year",
"季报:": "report_season"}
dfname_base = pd.DataFrame()
dfname_base['index_cn'] = list(dfname_dict.keys())
dfname_base['index_en'] = list(dfname_dict.values())
self.url_format = 'http://gs.amac.org.cn/amac-infodisc/res/pof/fund/%s.html'
self.headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'Connection': 'keep-alive',
'Content-Type': 'application/json'
}
self.dfname_base = dfname_base
self.xpath_pro = '//td[@class="td-content"]/p/a'
def get_productInfo(self, id):
url = self.url_format % id
try:
rs = requests.get(url, headers=self.headers)
# rs.text
rs.encoding = 'UTF-8'
tabs = pd.read_html(rs.text)
# 机构基本信息
tab_base = tabs[0].iloc[:, 0:2]
tab_base.columns = ['index_cn', 'val']
tab_base = tab_base.dropna()
# print(tab_base)
tab_base = pd.merge(self.dfname_base, tab_base, how='left')
tab_base.index = tab_base['index_en']
tab_base = tab_base[['val']]
# tab_base.dropna()
# tab_base
tab_base['val'] = ['' if isinstance(x, float) and math.isnan(x) else x for x in tab_base['val']]
tab_base = tab_base.T
# print(tab_base)
# tab_base['manager_namecn'][0] = tab_base['manager_namecn'][0].split(' ')[1]
tab_base['p_id'] = id
return tab_base
except:
return None
prodt = Product()
prodt.get_productInfo(1707311041109392)
index_en | fund_nm | fund_code | establish_date | record_date | record_stage | fund_type | currency_type | fund_manager | manager_type | trustee_name | operate_status | last_update | specail_message | report_month | report_halfyear | report_year | report_season | p_id |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
val | 平安道远投资管理(上海)有限公司*聚盈6号私募投资基金 | SW3120 | 2017-07-14 | 2017-08-01 | 暂行办法实施后成立的基金 | 私募证券投资基金 | 人民币现钞 | 平安道远投资管理(上海)有限公司 | 受托管理 | 平安银行股份有限公司 | 正在运作 | 2017-08-01 | 应披露0条,按时披露0条,未披露0条; | 应披露0条,按时披露0条,未披露0条; | 应披露0条,按时披露0条,未披露0条; | 应披露2条,按时披露2条,未披露0条; | 1707311041109392 |