年初之前写过一篇《用python批量获取公募基金季报pdf》的推文,当时恰好是三季度报告披露不久。最近到了基金年报扎堆的时候,把上次的代码拿来改一改,10秒钟可以爬到所有基金的年报,觉得不错可以点个在看支持一下。截止发文,有1980只基金公布了年报。
我们爬到对应的基金名称和pdf对应网址,就可以把基金报告下下来了,正好看看大佬们对于今年的形式都有何看法。
代码整体和上次差不多,只是对getpdfurl函数做了修改,修改后的函数见下,获取修改后的代码文件请在后台回复“基金年报”。
def getpdfurl(codes,sdate,edate):
sdate = pd.Timestamp(sdate).strftime('%Y-%m-%d')
edate = pd.Timestamp(edate).strftime('%Y-%m-%d')
if codes =='':
stocks = ''
else:
ords = a[codes]
stocks = codes + ',' + ords
params = {
'pageNum': '1',
'pageSize': '30',
'column': 'fund',
'tabName': 'fulltext',
'plate':'' ,
'stock': stocks,
'searchkey':'' ,
'secid':'' ,
'category': 'category_ndbg_jjgg',
'trade':'' ,
'seDate': '{}~{}'.format(sdate,edate),
'sortName': '',
'sortType': '',
'isHLtitle': 'true'}
url = 'http://www.cninfo.com.cn/new/hisAnnouncement/query'
headers = {"User-Agent": UserAgent(verify_ssl=False).random}
response_comment = requests.post(url,params = params,headers = headers )
res = json.loads(response_comment.text)
n = len(res['announcements'])
totpages = res['totalpages']
allpdf = []
for i in tqdm(range(1,totpages + 1)):
params = {
'pageNum': str(i),
'pageSize': '30',
'column': 'fund',
'tabName': 'fulltext',
'plate':'' ,
'stock': stocks,
'searchkey':'' ,
'secid':'' ,
'category': 'category_ndbg_jjgg',
'trade':'' ,
'seDate': '{}~{}'.format(sdate,edate),
'sortName': '',
'sortType': '',
'isHLtitle': 'true'}
url = 'http://www.cninfo.com.cn/new/hisAnnouncement/query'
# headers = {"User-Agent": UserAgent(verify_ssl=False).random}
response_comment = requests.post(url,params = params )
res = json.loads(response_comment.text)
for k in range(n):
allpdf.append(pd.DataFrame.from_dict(res['announcements'][k],orient='index').T)
# time.sleep(abs(np.random.normal()))
allpdf = pd.concat(allpdf,axis = 0).reset_index(drop = True)
allpdf = allpdf[['secName','secCode','announcementTitle','adjunctUrl']]
return allpdf
参数code取''时爬取所有基金公告列表,给定基金代码可以获取对应基金的年报。
爬出来数据格式如下
如果要下载对应的pdf,调用getFundReportpdf函数即可,但建议不要直接调用,1980份报告,每个都是百八十页,可能要下几个小时,可以挑几个自己感兴趣的基金下下来看。
举个例子,我们来看看景顺长城新兴成长(260108.OF)。
codes = '260108'
allpdf = getpdfurl(codes,sdate,edate)
getFundReportpdf(allpdf,fpath)
run一下年报就搞定。看看大佬对于后市的观点
另外如果想批量获取所有报告的观点也很容易通过代码实现,对每一篇报告,找到这一节的标题和下一节的标题切出来就可以了,感兴趣的童鞋可以把所有的报告都下下来切一个试试。切不出来的话可以等一等下篇推文,会给出代码。如果自己写的过程碰到问题,也欢迎后台留言提问,下次一起解答。