天天基金网批量爬虫实例

本文介绍批量爬天天基金网的基金信息,并保存在本地。

概要

天天基金网最近发生了一些变化,针对宽基指数挂钩的产品还提供估算,其他许多基金都不给提供净值估算服务了。本文针对前者进行爬虫。

适配对象

目前对宽基挂钩的指数还保留净值估算服务。界面如下:

代码

import requests
from bs4 import BeautifulSoup
import pandas as pd
from tabulate import tabulate

还是用用爬虫经典包,没有的自行pip一下。

下面自己定义一个函数,为了批量爬做准备:

def get_fund_info(code):
    # 构造请求URL
    url = f"http://fund.eastmoney.com/{code}.html"
    # 发送HTTP GET请求
    response = requests.get(url)
    # 解析HTML
    soup = BeautifulSoup(response.content.decode('utf-8', 'ignore'), 'html.parser')
    # 获取累计净值
    accumulative_value = soup.find(class_='dataItem03').find_all('span')[2].text
    #获取近六个月
    sixmonth_value = soup.find(class_='dataItem03').find_all('span')[4].text
    #获取成立以来
    fromstart_value = soup.find(class_='dataItem03').find_all('span')[6].text
    # 获取单位净值
    unit_value = soup.find(class_='dataItem02').find_all('span')[2].text
     # 获取今日波动净值
    todayvol  = soup.find(class_='dataItem02').find_all('span')[3].text   
   # 获取近3个月
    threemonth_value  = soup.find(class_='dataItem02').find_all('span')[5].text
    # 获取近1个月
    onemonth_value  = soup.find(class_='dataItem01').find_all('span')[9].text
    # 获取近1年
    oneyear_value  = soup.find(class_='dataItem01').find_all('span')[11].text
    #基金信息
    jjjl =  soup.find(class_='infoOfFund').find_all('a')[2]
    jjjl = jjjl.get_text(strip=True) if jjjl else "未知"
    jjglr =  soup.find(class_='infoOfFund').find_all('a')[3]
    jjglr = jjglr.get_text(strip=True) 
    return accumulative_value, unit_value, sixmonth_value ,todayvol ,threemonth_value, fromstart_value ,onemonth_value , oneyear_value , jjjl, jjglr

试一试

# 输入基金代码
fund_code = "013233"

# 获取基金信息
accumulative_value, unit_value ,sixmonth_value, todayvol,threemonth_value, fromstart_value, onemonth_value , oneyear_value ,jjjl ,jjglr = get_fund_info(fund_code)

print(fund_code,jjjl, jjglr)
print(f"单位净值:{unit_value}")
print(f"今日波动:{todayvol}")
print(f"近1月:{onemonth_value}")
print(f"近3月:{threemonth_value}")
print(f"近6月:{sixmonth_value}")
print(f"近1年:{oneyear_value}") 
print(f"成立以来:{fromstart_value}")
print(f"累计净值:{accumulative_value}")

结果和第一张图对比了一下,完全准确。下一步批量爬数据,并乖乖形成dataframe。

df = pd.DataFrame(columns=['基金代码', '单位净值','今日波动', '近一月','近三月', '近六月', '近一年',  '成立以来',  '累计净值' ,'基金经理', '基金公司'])

fund_codes = [  '013233', '010992','003579'] #自己去设定list,注意是宽基类基金

for code in fund_codes:
    accumulative_value, unit_value, sixmonth_value, todayvol, threemonth_value, fromstart_value, onemonth_value, oneyear_value, jjjl, jjglr = get_fund_info(code)
    df = pd.concat([df, pd.DataFrame({
        '基金代码': [code],
        '单位净值': [unit_value],
        '今日波动': [todayvol],
        '近一月': [onemonth_value],
        '近三月': [threemonth_value],
        '近六月': [sixmonth_value],
        '近一年': [oneyear_value],
        '成立以来': [fromstart_value],
        '累计净值': [accumulative_value],
        '基金经理': [jjjl],
        '基金公司': [jjglr]
    })], ignore_index=True)

 保存到本地

# 将DataFrame保存为逗号分隔的CSV文件
output_file = 'output20230823.csv'
df.to_csv(output_file, sep=',', index=True)
print(f"数据已保存为CSV文件:{output_file}")

忘记保存在哪里了?没关系,查一下路径

import os
os.getcwd()

或者直接搜索文件名,打开路径。

以下是我打开Excel的表格。

基金代码单位净值今日波动近一月近三月近六月近一年成立以来累计净值基金经理基金公司
00132330.95490.41%-2.08%-3.05%-3.42%-0.28%-4.51%0.9549孙蒙华夏基金
10109921.0040.52%-2.21%-3.70%-6.78%-7.31%0.40%1.004姚楠燕东财基金
20035791.57220.69%-0.59%-2.25%-4.13%-6.24%47.74%1.5722耿帅军中金基金

小结

天天基金网几乎年年都在变,代码有一定时效性。现在金融监管原因,一些基金不公布净值,自然数据位置也发生变化,爬虫代码自然不同。本文就先更新保持净值公布的基金爬虫代码吧!

欢迎关注小红薯

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值