一、大体思路
获取以去年(2020年)前为节点的基金数据:2019-2020年基金增长情况(近一年)、2018-2020年基金增长情况(近两年)、2019-2021年基金增长情况(近三年)、2020年末累计净值、基金经理收益率排行、基金公司规模排行作为特征向量
一、 爬取天天基金网基金排行榜
进入天天基金网排行榜页面,可以发现每个页面可显示50条基金信息,在进入下一页时,url没有变化,所以我们没法通过改变url来爬取所有数据。但是通过点击页面右下角的”“不分页”选项,可在此页面上获得所有排行榜上的基金。
我们使用selenium加载网页,获取页面信息,利用pyquery提取所需要的信息,并将数据以csv文件存储。爬虫代码如下:
import codecs
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from pyquery import PyQuery as pq
import csv
import json
from lxml import etree
import pymongo
def gethtml(url):
brower = webdriver.Chrome()
brower.get(url)
html = brower.page_source
return html
def getinformation(html):
# 打开csv文件
with open('Fund.csv', 'a', encoding='utf-8-sig') as f:
# 设定标题
filename = ['index', '代码', '网址', '简称', '日期', '单位净值', '累计净值', '日增长率', '近一周',
'近一月', '近三月', '近六月', '近一年', '近两年', '近三年', '今年来', '成立来', '自定义',
'手续费']
writer = csv.DictWriter(f, fieldnames=filename)
writer.writeheader()
# 网页实例化
doc = pq(html)
# 获取相应标签下的元素,空格代表子孙节点、class的值写在小数点 . 后面、标签直接写(ID是写在#后面)
items = doc(
'html body div.mainframe div.dbtable table#dbtable tbody tr ').items()
for item in items:
list = []
infors = item.find('td').items()
for i, infor in enumerate(infors):
if i == 0 or i == 19:
continue
list.append(str(infor.text().strip()))
if i == 2:
href = infor.find('a').attr('href')
# write(href)
list.append(href)
print(list)
print(len(list))
writer = csv.writer(f)
writer.writerow(list)
if __name__ == "__main__":
url = 'http://fund.eastmoney.com/data/fundranking.html#tall;c0;r;szzf;pn10000;ddesc;qsd20201210;qed20211210;qdii;zq;gg;gzbd;gzfs;bbzt;sfbb'
html = gethtml(url)
getinformation(html)
结果如下图:
二、基金推荐
基金选择策略:
1.四四三三法则
四:即一年期基金绩效排名在同类型基金前1/4;
四:即今年以来、两年、三年、五年基金绩效在同类型基金前1/4;
三:即六个月基金绩效排名在同类型基金前1/3;
三:即三个月基金绩效排名在同类型基金前1/3。
2.基金所持有的股票
3.基金经理的收益率



