选基金神器!Python爬取中国所有基金经理的数据

52 阅读5分钟

一、爬取目标

图1.PNG

二、完整源码

#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
#
# Copyright (c) 2024 愤怒的it男, All Rights Reserved.
# FileName : code.py
# Date     : 2024.01.17
# Author   : 愤怒的it男
# Version  : 1.0.0
# Node     : 欢迎关注微信公众号【愤怒的it男】
#
#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

import csv
import requests
import numpy as np
import js2py
from lxml import etree
from prettytable import PrettyTable

def getData(page, baseUrl, headers):
    response = requests.get(url=baseUrl, headers=headers)
    js_obj=js2py.EvalJs()
    js_obj.execute(response.text)
    return js_obj.returnjson.data.to_list()

def adjustData(data):
    arr = np.array(data)
    arr = np.concatenate((arr[:, 1:2],arr[:, 3:7],arr[:, 10:]), axis=1)
    def my_func(row):
        row[2] = row[2].replace(',', '\n')
        row[3] = row[3].replace(',', '\n')
        return row
    np.apply_along_axis(my_func, 1, arr)
    return arr.tolist()

def printData(result):
    table = PrettyTable()
    table.field_names = ["姓名", "所属公司", "现任基金代码", "现任基金名称", "当前大类基金管理时间", "现任基金资产总规模", "现任基金最佳回报"]
    table.add_rows(result)
    print(table)

def saveData(result):
    with open('全国基金经理.csv', 'w', encoding='utf-8', newline='') as file:
        writer = csv.writer(file)
        writer.writerows(result)

def main():
    result = []
    baseUrlList = [
    'https://fund.eastmoney.com/Data/FundDataPortfolio_Interface.aspx?dt=14&mc=returnjson&ft=all&pn=2000&pi=1&sc=abbname&st=asc',
    'https://fund.eastmoney.com/Data/FundDataPortfolio_Interface.aspx?dt=14&mc=returnjson&ft=all&pn=2000&pi=2&sc=abbname&st=asc',]
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    for page,baseUrl in enumerate(baseUrlList):
        dataList = getData(page, baseUrl, headers)
        result = result + dataList
    result = adjustData(result)
    printData(result)
    saveData(result)
    
if __name__== "__main__" :
    main()

三、源码简析

  1. 使用js2py库执行JavaScript代码,所得到的变量值为一个对象:<class 'js2py.base.JsObjectWrapper'>,如需要在python中使用该变量值,还要使用to_list()转换成python中的数组类型。
def getData(page, baseUrl, headers):
    response = requests.get(url=baseUrl, headers=headers)
    js_obj=js2py.EvalJs()
    js_obj.execute(response.text)
    return js_obj.returnjson.data.to_list()
  1. 如果需要删除二维数组的某一列或者几列,可以通过numpy库进行裁切,将有用的列保留下来,然后再用numpy库的concatenate()函数进行拼接,得到一个新的二维数组。
arr = np.array(data)
arr = np.concatenate((arr[:, 1:2],arr[:, 3:7],arr[:, 10:]), axis=1)
  1. 如果需要对二维数组的逐列或者逐行进行某些操作,可以使用numpy库的apply_along_axis()函数,该函数的参数1为自定义的操作函数,参数2为逐项的维度(0:逐列,1:逐行),参数3为需要操作的数组。
def my_func(row):
    row[2] = row[2].replace(',', '\n')
    row[3] = row[3].replace(',', '\n')
    return row
np.apply_along_axis(my_func, 1, arr)

四、爬取结果

+---------------------+------------------------+--------------+-------------------------------------------------------------+----------------------+--------------------+------------------+
|         姓名        |        所属公司        | 现任基金代码 |                         现任基金名称                        | 当前大类基金管理时间 | 现任基金资产总规模 | 现任基金最佳回报 |
+---------------------+------------------------+--------------+-------------------------------------------------------------+----------------------+--------------------+------------------+
|         安安        |        中金公司        |    920007    |                        中金恒瑞债券A                        |         776          |     34.61亿元      |      7.03%       |
|                     |                        |    920011    |                  中金安心回报灵活配置混合A                  |                      |                    |                  |
|                     |                        |    920921    |                  中金安心回报灵活配置混合C                  |                      |                    |                  |
|                     |                        |    920927    |                        中金恒瑞债券C                        |                      |                    |                  |
|        艾邦妮       |        华夏基金        |    005826    |                       华夏潜龙精选股票                      |         503          |      2.65亿元      |      -6.77%      |
|                     |                        |    010692    |                      华夏核心价值混合A                      |                      |                    |                  |
|                     |                        |    010693    |                      华夏核心价值混合C                      |                      |                    |                  |
|        艾定飞       |        华商基金        |    007685    |                     华商电子行业量化股票                    |         1877         |     12.61亿元      |      23.67%      |
|                     |                        |    007853    |                华商计算机行业量化股票发起式A                |                      |                    |                  |
|                     |                        |    015094    |                       华商300智选混合A                      |                      |                    |                  |
|                     |                        |    015095    |                       华商300智选混合C                      |                      |                    |                  |
|                     |                        |    017628    |                华商计算机行业量化股票发起式C                |                      |                    |                  |
|                     |                        |    018973    |                   华商科创板量化选股混合A                   |                      |                    |                  |
|                     |                        |    018974    |                   华商科创板量化选股混合C                   |                      |                    |                  |
|                     |                        |    630015    |                     华商大盘量化精选混合                    |                      |                    |                  |
|        艾小军       |        国泰基金        |    000218    |                       国泰黄金ETF联接A                      |         3655         |     847.40亿元     |      91.29%      |
|                     |                        |    004253    |                       国泰黄金ETF联接C                      |                      |                    |                  |
|                     |                        |    007817    |                 国泰中证全指通信设备ETF联接A                |                      |                    |                  |
|                     |                        |    007818    |                 国泰中证全指通信设备ETF联接C                |                      |                    |                  |
|                     |                        |    010210    |                  国泰中证计算机主题ETF联接C                 |                      |                    |                  |
|                     |                        |    012362    |                 国泰中证全指证券公司ETF联接A                |                      |                    |                  |
|                     |                        |    012363    |                 国泰中证全指证券公司ETF联接C                |                      |                    |                  |
|                     |                        |    014994    |                   国泰上证180金融ETF联接C                   |                      |                    |                  |
|                     |                        |    015598    |                国泰中证申万证券行业指数(LOF)C               |                      |                    |                  |
|                     |                        |    015599    |                  国泰国证航天军工指数(LOF)C                 |                      |                    |                  |
|                     |                        |    020021    |                   国泰上证180金融ETF联接A                   |                      |                    |                  |
|                     |                        |    159516    |                国泰中证半导体材料设备主题ETF                |                      |                    |                  |
|                     |                        |    159612    |                    国泰标普500(QDII-ETF)                    |                      |                    |                  |
|                     |                        |    160224    |                  国泰中证计算机主题ETF联接A                 |                      |                    |                  |
|                     |                        |    501016    |                国泰中证申万证券行业指数(LOF)A               |                      |                    |                  |
|                     |                        |    501019    |                  国泰国证航天军工指数(LOF)A                 |                      |                    |                  |
|                     |                        |    510230    |                      国泰上证180金融ETF                     |                      |                    |                  |
|                     |                        |    512660    |                       国泰中证军工ETF                       |                      |                    |                  |
|                     |                        |    512720    |                      国泰中证计算机ETF                      |                      |                    |                  |
|                     |                        |    512760    |                     国泰CES半导体芯片ETF                    |                      |                    |                  |
|                     |                        |    512880    |                   国泰中证全指证券公司ETF                   |                      |                    |                  |
|                     |                        |    513100    |                      国泰纳斯达克100ETF                     |                      |                    |                  |
|                     |                        |    515880    |                   国泰中证全指通信设备ETF                   |                      |                    |                  |
|                     |                        |    518800    |                         国泰黄金ETF                         |                      |                    |                  |
|        包兵华       |        鹏华基金        |    006230    |                       鹏华研究驱动混合                      |         1732         |     33.54亿元      |      64.00%      |
|                     |                        |    007146    |                       鹏华研究智选混合                      |                      |                    |                  |
|                     |                        |    009188    |                       鹏华股息精选混合                      |                      |                    |                  |
|                     |                        |    010264    |                      鹏华成长智选混合A                      |                      |                    |                  |
|                     |                        |    010265    |                      鹏华成长智选混合C                      |                      |                    |                  |

图2.PNG

图3.PNG

五、免责声明

本公众号所有源码均为个人学习所编写,仅可用于计算机技术学习及研究等合法行为,禁止利用本公众号的源码从事任何违反本国(地区)法律法规的业务,如有发现存在违法违规行为我会举报到网监部门。