【Python爬虫实战】5分钟学会筛选优质债券基金

  • 前言
  • 一、债券基金
    • 1.什么是债券基金
    • 2.债券基金适合人群
    • 3.如何筛选债券基金
    • 4.根据个人需求选择合适的债券基金
  • 二、爬虫步骤
    • 0.目标
    • 1.引入库
    • 2.准备爬虫需要的模块
      • 2.1 URL访问模块
      • 2.2 Json处理模块
      • 2.3 正则表达式模块
      • 2.4 基金经理信息封装模块
      • 2.5 爬取天天基金网页模块
      • 2.6 保存数据转存Excel模块
    • 3.执行main函数
  • 三、运行过程&结果展示
  • 四、总结

前言

大家好,我是程序员阿浪,上一期我们介绍了货币基金的筛选规则和爬虫教程,没有想到基金营的同学们也因此对爬虫很感兴趣,在这里阿浪非常感谢基金营朋友们的鼓励和支持(●’◡’●),对于非计算机专业的同学来说,初次听到爬虫这个概念可能会比较陌生。如果想要学习爬虫的话,可能需要先学习一下python编程语言,当然如果特别感兴趣可以在公众号内留言私信【爬虫的学习方法】,阿浪会针对非计算机专业的同学去快速学习爬虫给一些针对性的建议。

如果有很多同学想学习的话,后期我会考虑写一篇关于爬虫实战详细教程的推送(手把手教你如何分析网页的那种)d===( ̄▽ ̄*)b,有需要的盆友赶快关注起来吧!( •̀ ω •́ )✧

本文筛选出来的基金结果不构成投资建议,因为荐股犯法( ̄▽ ̄)",小伙伴们也不要听信什么荐股群,只有自己真正学到了理财的知识,才知道自己投哪只基金/股票,如果盲目的跟着别人投,是很容易被市场割韭菜的。

PS:基金训练营毕业证书 (说明本文的基金筛选指标有理论参考依据)✌ 至于如果有朋友想问我这门课的质量如何,可以去我的公众号给我留言私信。这里以爬虫教程为主。

如果这篇文章对您有帮助,欢迎您给文章(三连思密达!)点赞、在看并关注我的微信公众号【THU小鱼干杂货铺】(可扫描文末二维码),原创码字不易,您的支持是对我最大的鼓励!


一、债券基金

1.什么是债券基金

债券基金是80%以上投资债券的基金,投资产品收益比较稳定。一般分为纯债基金、一级债基、二级债基三类,债券型基金的投资以国债、金融债等固定预期收益类金融工具为主,因此债券基金风险较低,预期收益较稳定。

债券基金的优点包括:

1.门槛低,对资金量较少的投资者比较友好

2.专业人士打理,有专业的基金经理和团队帮我们投资

3.投资债券基金的收益相对较高

2.债券基金适合人群

如果不想承担股市风险,追求稳定的预期收益,或是投资新手,那么建议选择债券甚至纯债基金。相对而言,纯债基金的波动更较小,预期收益更稳定。

3.如何筛选债券基金

1.基金成立时间在3年以上

2.基金的规模在10亿-100亿中间

3.优先选择累积3年以上收益率更高

4.优先选择费率(基金服务费用)更低的基金

5.考察基金经理的综合评定。基金经理的从业年限在3年以上,基金经理更换不频繁,越稳定越好。

4.根据个人需求选择合适的债券基金

债券基金后缀的ABC主要区别在于收费方式的不同。
当债券基金筛选好后,根据个人手里资金的情况:

  • 如果是短期投资(1-2年),可以选择C类债券,其销售服务费率只有0.35%,而AB类的前后端申购费率通常高于C类。
  • 如果是长期持有(5年或5年以上)可选择B类,后端收费的方式,持有时间越长费率越优惠。
  • 如果不知道投资多久,那就选择A类,一次性支付前端申购费。

二、爬虫步骤

0.目标

爬取天天基金网上优质的债券基金筛选信息,存入excel表格

1.引入库

from bs4 import BeautifulSoup #网页解析,获取数据
import re #正则表达式,进行文字匹配
import urllib.request,urllib.error #指定url,获取网页数据
import xlwt #进行excel操作
import json #解析网页的json对象字符串

2.准备爬虫需要的模块

2.1 URL访问模块

该模块主要通过构造浏览器客户端头部(伪装作用)发送request请求获取数据。

# 得到一个指定URL的网页内容
def askURL(url):#head主要是伪装作用,用户代理,告诉服务器,我们是什么类型的浏览器# 本质上是告诉浏览器我们可以接收什么类型的文件内容head={"Referer": "http://fund.eastmoney.com/data/hbxfundranking.html","User-Agent":" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"}request = urllib.request.Request(url,headers=head)html = ""try:response = urllib.request.urlopen(request)# print(response.read().decode("utf-8"))html = response.read().decode("utf-8")# print(html)except urllib.error.URLError as e:if(hasattr(e,"code")):print(e.code)if(hasattr(e,"reason")):print(e.reason)return html

2.2 Json处理模块

该模块主要用于处理网页异步加载的信息,通过分析网站后发现,债券基金的信息需要在json字符串中获取。

#从html处理成标准json数据
def html2json(html):html = html.strip() #去掉前后空格# print(html)findjson = re.compile(r'^var rankData =(.*)',re.S)dict = re.findall(findjson,str(html))[0]return json.loads(dict.strip())

2.3 正则表达式模块

正则表达式模块在此处作为全局变量处理,也可单独放在方法getData()内作局部变量。

findFundScale = re.compile(r'.*:(.*?)亿元',re.S) #基金规模,re.S忽略换行符

2.4 基金经理信息封装模块

除货币基金外,大多数基金都需要考察该基金经理的能力。因此将该模块单独封装,为后期筛选其他基金(如混合基金、股票基金)做准备,以后分析的话就可以直接用啦!

def checkFundManager(fund_code):findManageDate = re.compile(r'<strong>上任日期:</strong>(.*?)</p>')manager_url = "http://fund.eastmoney.com/f10/jjjl_"+str(fund_code)+".html"html = askURL(manager_url)soup = BeautifulSoup(html,"html.parser")item = soup.find_all('div', class_="jl_intro")#获得一个a标签,如:<a href="http://fund.eastmoney.com/manager/30428548.html" style="color:#333; text-decoration:none;">裴禹翔</a>a_tag = item[0].find_all('a')[1]managerName = a_tag.string #经理名字manageDate = re.findall(findManageDate,str(item[0]))[0] #经理上任管理该基金起始日期table = soup.find_all('table',class_="w782 comm jloff")beginWorkDate = table[1].find_all('tr')[-1].find_all('td')[3].string #经理从业日期return managerName,beginWorkDate,manageDate

2.5 爬取天天基金网页模块

该模块是爬虫的核心部分,完整爬取逻辑可见代码注释

def getData(baseUrl):datalist = []html = askURL(baseUrl) #基金列表jsondetail_html = askURL(baseUrl+"&sh=table") #基金详情页json#转为json格式funds_json = html2json(html)detail_html_json = html2json(detail_html)for i in range(0,len(funds_json['datas'])):fund_info = []fund = funds_json['datas'][i].split(',')print("当前正在爬取 %s 的基金信息..." %fund[1])#添加基金代码fund_info.append(fund[0])# 添加基金名称fund_info.append(fund[1])#添加近3年收益fund_info.append(fund[11])'''进入基金详情页,获取基金规模'''soup = BeautifulSoup(detail_html_json['datas'][i], "html.parser")  # 将抓取的html网页转换为树形结构的文档item = soup.find_all('ul', class_="ul-info")  # 查找符合要求的字符串,形成列表scale = re.findall(findFundScale, str(item))[0]# 添加基金规模(单位:亿元)fund_info.append(scale)# 添加手续费信息if (fund[-1] == ''):fund_info.append('0.00%')else:fund_info.append(fund[-1])managerName, beginWorkDate, manageDate = checkFundManager(fund[0])#添加基金经理名字,从业日期,上任该基金日期fund_info.append(managerName)fund_info.append(beginWorkDate)fund_info.append(manageDate)datalist.append(fund_info)return datalist

2.6 保存数据转存Excel模块

#保存数据
def saveData(datalist,savepath):print("saving...")book = xlwt.Workbook(encoding="utf-8",style_compression=0)  # 创建workbook对象sheet = book.add_sheet("债券基金信息",cell_overwrite_ok=True)  # 创建工作表单col = ("基金代码","基金名称","近3年收益率","基金规模(亿元)","手续费率","基金经理名称","基金经理起始从业日期","基金经理上任该基金日期")for i in range(0,len(col)):sheet.write(0,i,col[i]) #写一行列名for i in range(0,len(datalist)):print("写入第%d条."%(i+1))data = datalist[i]for j in range(0,len(col)):sheet.write(i+1,j,data[j])book.save(savepath)  # 保存数据表print("saved.")

3.执行main函数

def main():# nx=71表示基金成立年限>7年,sc=3n表示近三年收益率;st=desc表示按收益率降序,pi=1从第一页开始,pn=20表示显示20条,这里改成200,直接取前200只债券基金url = "http://fund.eastmoney.com/data/FundGuideapi.aspx?dt=0&ft=zq&sd=&ed=&nx=71&sc=3n&st=desc&pi=1&pn=200"# 1.爬取网页,获取数据datalist = getData(url)# 3.保存数据savepath = "债券基金信息表.xls"saveData(datalist,savepath)

三、运行过程&结果展示

债券基金的关键指标已经罗列在表格中,依据债券基金的筛选原则,最终可筛选出44只符合条件的优质基金(截至爬取日期),完整基金信息的Excel表格和源代码可在公众号回复关键词【债券基金】免费获取~


四、总结

本文主要对债券基金的筛选流程和爬虫实操进行了代码讲解,可在我的公众号【THU小鱼干杂货铺】(微信号:DryGoodsShare)回复关键词【债券基金】获取完整代码和筛选结果Excel表。后期完善代码后我将把源码放入我的github仓库,码字不易,期待您的点赞、在看和关注!(B站说:内心强大的人从不吝啬赞美和鼓励( •̀ ω •́ )✧)

大佬们的 【三连】 就是阿浪创作的最大动力,如果本篇博客有任何错误和建议,欢迎大佬们留言!

我是阿浪,对所有未知都要心存敬畏,永远保持一颗好奇心,我们下期见!


【Python爬虫实战】【天天基金网】想要低风险+心动收益?5分钟学会筛选优质债券基金相关推荐

  1. 线程,协程对比和Python爬虫实战说明

    此文首发于我的个人博客:线程,协程对比和Python爬虫实战说明 - zhang0peter的个人博客 这篇文章写的是我对线程和协程的理解,有错误之处欢迎指出. 举一个餐馆的例子.我们把一个餐厅当做一 ...

  2. python爬虫图片实例-【图文详解】python爬虫实战——5分钟做个图片自动下载器...

    我想要(下)的,我现在就要 python爬虫实战--图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识(没看的赶紧去看)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk ...

  3. Python爬虫实战六之抓取爱问知识人问题并保存至数据库

    大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...

  4. Python爬虫实战(5):模拟登录淘宝并获取所有订单

    Python爬虫入门(1):综述 Python爬虫入门(2):爬虫基础了解 Python爬虫入门(3):Urllib库的基本使用 Python爬虫入门(4):Urllib库的高级用法 Python爬虫 ...

  5. Python爬虫实战之(五)| 模拟登录wechat

    作者:xiaoyu 微信公众号:Python数据科学 知乎:Python数据分析师 不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈.关注的新闻或是公众号.还有个人信息或是隐私都被绑定在了一 ...

  6. Python爬虫实战之(五)| 模拟登录wechat 1

    作者:xiaoyu 微信公众号:Python数据科学 知乎:Python数据分析师 不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈.关注的新闻或是公众号.还有个人信息或是隐私都被绑定在了一 ...

  7. qq纵横四海源码_【0基础】纵横中文网python爬虫实战

    原文在此~ [0基础]纵横中文网python爬虫实战​mp.weixin.qq.com 大家好,我是你们的机房老哥! 在粉丝群的日常交流中,爬虫是比较常见的话题.python最强大的功能之一也是爬虫. ...

  8. python爬虫源码项目_32个Python爬虫实战项目,满足你的项目慌(带源码)

    写在前面 学习Python爬虫的小伙伴想成为爬虫行业的大牛么? 你想在网页上爬取你想要的数据不费吹灰之力么? 那么亲爱的小伙伴们肯定需要项目实战去磨练自己的技术,毕竟没有谁能随随便便成功! 小编前段时 ...

  9. Python爬虫实战---抓取图书馆借阅信息

    Python爬虫实战---抓取图书馆借阅信息 原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约 ...

  10. 我妈给我介绍对象了,我大学还没毕业呢,先在婚介市场也这么卷了的吗?【Python爬虫实战:甜蜜蜜婚介数据采集】

    大家好,我是辣条. 说出来你们可能不信,我一个在校还没毕业的学生家里竟然给我介绍对象了-这么着急的吗?现在结婚市场都这么卷了吗?男孩们女孩们不努力的话是会被家里捉回去结婚的哦. 这是和我妈的聊天对话, ...

最新文章

  1. 为什么不建议用 equals 判断对象相等?
  2. HTTP/2 与 WEB 性能优化(一)
  3. windows下用QTwebkit解析html
  4. java servlet 请求_java servlet请求数据
  5. 计数排序之python 实现源码
  6. GDCM:读取两个DICOM文件保存在另外dicom文件中的测试程序
  7. Biorhythms(POJ-1006)
  8. java hook全局钩子,牛逼骚操作:Java 虚拟机关闭钩子(Shutdown Hook)!
  9. 暴力 Codeforces Round #183 (Div. 2) A. Pythagorean Theorem II
  10. matlab使用load指令,科学网—matlab常用方法 - 陈超的博文
  11. 海龟绘图两小时上手C语言 - 2 绘制正方形
  12. git-bisect last updated in 2.19.1【转】
  13. GPS NMEA-0183标准数据介绍
  14. 热部署Devtools
  15. 【大数据部落】 用机器学习识别不断变化的股市状况—隐马尔可夫模型(HMM)股票指数预测实战
  16. Nature子刊 | 绘制植物叶际菌群互作图谱以建立基因型表型关系
  17. Win10设置双网卡优先级
  18. 第七篇 indicators(3)第三方指标库Ta-lib
  19. 中国在线直播行业用户规模达6.35亿人,约97.3%的主播年收入在3万元以下 | 美通社头条...
  20. 计算机考研专业课考c语言的大学,【择校必看】十三所计算机专业课只考数据结构的985院校!...

热门文章

  1. SAP 增强学习(4):四代增强 隐式增强(Enhancement-Point)
  2. 独立IP、特产浏览量(PV)、访问次数(VV)、独立访客(UV)
  3. pycharm远程操作linux进行开发
  4. Marshmallow详解
  5. NYOJ54-小明的存钱计划
  6. java毕业设计蛋糕店会员系统Mybatis+系统+数据库+调试部署
  7. 手把手教你怎么从微软官方下载 Windos10 正版镜像
  8. Swift 网络请求——Moya的使用
  9. Android Studio 设置控件边框
  10. FPGA之旅设计99例之第九例-----驱动0.96寸OLED屏