前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬取全市场基金持仓,扒一扒基金经理们的调仓选股思路

Python爬取全市场基金持仓,扒一扒基金经理们的调仓选股思路

作者头像
量化小白
发布2023-04-03 20:35:24
1.3K1
发布2023-04-03 20:35:24
举报

虽然距离基金二季报公布的DDL已过去近1个月,但我们还是赶(bu)个(shi)晚(tuo)集(yan),分享一下基于python爬取天天基金网基金持仓数据的方法,最新及历史持仓数据均可爬。感兴趣的小伙伴可以拿去玩一下,等到10月份三季报披露节点,又会是及时抄作业的真香小工具啦。

本文全部代码请在后台回复“公募持仓代码"获取。

10秒划重点

  • selenium模拟人操作浏览器
  • requests爬取、bs4解析获取基金持仓数据

写在前面:为什么要抄公募基金经理作业?

1.学习性价比高。与小散相比,机构投资者具有研究资源、时间、信息上的显著优势。我一直很赞同投资圈里广为流传的一句话——“人只能赚取自身认知范围内的钱。你所赚取的每一分钱,都是你对这个世界认知的变现;而你所亏损的每一分钱,也都是你为自身认知缺陷的付费”。作为小散的我显然很难像机构投资者那样,投入大量财力、聘请专业人力、专注海量时间来只做投资这一件事,因此借用技术手段,学习“好学生”码好的学习成果,怎么看都是一件很划算的事。

2.跟着大哥混有汤喝。机构化趋势下,机构对大A定价权持续上升。根据协会公布的权威数据,截至2021年6月,全市场基金数目8320只,规模23.03万亿元,其中非货币基金7989只,规模13.76万亿元。根据Wind数据,2021Q2公募基金持有A股总市值5.57万亿元,持仓市值占A股流通总市值的比重从2017Q1的4.07%一路提升至7.51%。即便只卡位小浪尾巴,也能够跟随机构化浪潮分到一杯羹。

3.公募基金是个较“开放”又“稳定”的好大哥。首先,与私募基金相比,公募基金不仅数据披露程度较大,而且数据披露较为即时。公募基金季度报告披露前十大持仓,中报、年报披露全部持仓。按照《证券投资基金信息披露管理办法》,公募基金季报需在每季度结束之日起15个工作日内公布。其次,公募基金受限于集中风控、日内不可反向、交易费率较私募高等约束,大部分产品的持仓较为稳定,换仓频率及程度都较低。即便考虑到数据发布的延迟,公募基金还是有一些留存有效的学习内容。

注:爬取公募基金持仓并分析的应用场景,其实远不止抄个股跟风格。基于持仓优选基金,挖掘基金经理前瞻能力、隐形交易能力等等都可以做。感兴趣的小伙伴可以留个言,关注多的话专门分享一期~

进入正题

一、数据源/网页分析

天天基金网(https://www.1234567.com.cn)是东方财富旗下专业的基金交易平台,基金数据全、更新快,关键免费、可爬、友好。

1.单只目标基金持仓详情页

先观察几只基金的持仓详情页,总结网址构成、数据页面布局的规律。以年初至今收益top5的如下2只基金为例:

1)前海开源新经济A(000689)

网址:https://fundf10.eastmoney.com/ccmx_000689.html

Chrome打开上述网址后,F12查看网页源代码。点击下图黄色框内小箭头,可查看网页上任意元素/控件对应的代码位置。例如:点击左侧页面上粉色框内元素,可定位至右侧代码区内蓝色阴影代码行,绿色框区域显示该代码所在节点结构。

2)金鹰民族新兴(001298)

总结可知:

1)网址构成:“https://fundf10.eastmoney.com/ccmx_”+{基金6位代码}+”.html”

2)基金信息:CSS选择器语法下'#bodydiv > div > ...'可进一步定位基金名称、成立日、类型、基金经理、管理人字段信息

3)基金持仓:CSS选择器语法下’#cctable > div > div’可定位持仓明细表格

4)年份选择按钮:XPath语法下’//*[@id='pagebar']/div/label[@value={年份}]’

注:CSS选择器、XPath用于选取并控制html、xml页面中的元素/节点。对此不熟悉的小伙伴,可戳如下链接自行补习下。

CSS选择器:https://www.runoob.com/cssref/css-selectors.html

XPath:https://www.runoob.com/xpath/xpath-syntax.html

综上,只要指定基金6位代码,即可用同一段爬取及解析代码,获取基金最新及历史持仓。

如果想要批量爬取全市场基金持仓明细,我们还需要获取全市场基金代码集合。

2.获取全市场基金代码集合

天天基金网页http://fund.eastmoney.com/allfund.html提供所有基金的代码和名称。同样F12定位目标字段代码,可知XPath语法下'//*[@id="code_content"]/div/ul/li/div/a[1]/text()’可获得“(基金6位代码)基金名称”字符串。

二、开爬

1.导入所需包(所有代码文件获取方式见文章开始

代码语言:javascript
复制
import requests
from lxml import etree
from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
import time

还可选择性导入下面包,在requests.get(url, headers={“User-Agent”:UserAgent(verify_ssl=False).random})语句中调用以伪装请求头。但有小伙伴反映调用时报错:fake-useragent Maximum amount of retries reached。这需要将fake_useragent_{version}.json文件保存至本地来解决。要是怕麻烦的话,爬取数据较小时不伪装请求头问题也不大。

from fake_useragent import UserAgent

2.selenium模拟操作浏览器

天天基金网基金持仓详情页html动态加载了js文件,涉及从服务端加载数据。当我们想爬取历史年份持仓时,历史数据在初始html页面上是看不到的,需要点击年份选择按钮后才可加载。这种情况下,requests爬取困难,就需要召唤selenium了。

selenium模仿人的行为操作浏览器,江湖号称只要人能看到的数据就都可以爬取。但selenium也存在效率较低的问题,有时候为了保证页面加载完毕需要显式等待等等。

1)初始化浏览器

2)获取网页

3)定位年份选择按钮并点击

driver.find_element_by_xpath(f"//*[@id='pagebar']/div/label[@value={year}]").click()

3.爬取全市场基金列表

4.爬取指定基金近N年持仓

注意有些基金是不持有股票的,但仍会有详情页,在详情页取表时会抛出异常,要对此情况进行处理。

三、持仓结果展示

指定yback_num=1爬取今年全部基金持仓明细,可得到7680只基金。合并同一基金A类和C类份额后,最终得到5395只基金、102630条持仓个股明细。基金类型包括:股票型、混合型、债券型、股票指数型、货币型、ETF、货币型等。

其中,主动权益类基金持仓对于抄作业选股的参考价值更高,因此,我们筛选出股票型、混合型-偏股、混合型-灵活基金的持仓进行简要分析。

以持仓风格切换分析为例。对比下表中2021Q2相对2021Q1的持仓变化,可以发现,基金主要增配了高景气度的成长、周期行业,主要减配了消费、金融。

此外,还可以分析不同类型基金、基金经理的持仓风格切换,跟踪热门基金经理的最新持仓等等。考虑到这些后续分析不是本篇重点,在此不再展开。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量化小白躺平记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档