一、爬取目标
二、完整源码
#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
#
# 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()
三、源码简析
-
使用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()
-
如果需要删除二维数组的某一列或者几列,可以通过numpy库进行裁切,将有用的列保留下来,然后再用numpy库的concatenate()函数进行拼接,得到一个新的二维数组。
arr = np.array(data)
arr = np.concatenate((arr[:, 1:2],arr[:, 3:7],arr[:, 10:]), axis=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 | | | |
五、免责声明
本公众号所有源码均为个人学习所编写,仅可用于计算机技术学习及研究等合法行为,禁止利用本公众号的源码从事任何违反本国(地区)法律法规的业务,如有发现存在违法违规行为我会举报到网监部门。
原文始发于微信公众号(愤怒的it男):选基金神器!Python爬取中国所有基金经理的数据
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/234440.html