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

一、爬取目标

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

二、完整源码

#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
#
# 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 | | | |

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

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

五、免责声明

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

原文始发于微信公众号(愤怒的it男):选基金神器!Python爬取中国所有基金经理的数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/234440.html

(0)
葫芦侠五楼的头像葫芦侠五楼

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!