这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战
不想做投资的码农不是好厨子。
1 为什么要写这个文章
自己刚学了一点儿python 的皮毛,感觉这是一门很好的语言和辅助工具,因此借此来拓展一下自己的技能和知识范围,在一个新的圈子里折腾一下。这个是一个系列的文章,从这里开始,我会分享我自己的学习心得,最终得到的是学习的乐趣和发掘基金投资的方法,不仅能学习到知识还能赚到一点儿买菜钱,哈哈。
2 哪里去获取数据呢
这里给大家准备好了,
# 打开这个连接,就能找看到对应的基金信息
http://fund.eastmoney.com/jzzzl.html
有了基金连接,我们要做的就是怎么把它抓取下来,123 开始,我恰巧发现了后台访问的接口,是不是很神奇,该是上图的时候了,大家可以看到如下图:
# 这是原始的连接
http://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx?lx=1&sort=zdf,desc&page=2,200&onlySale=0
# 经过我使用postman 删减掉一些参数发现精简的连接如下,我不能不吐槽一下,这个时候了还有参数传递使用中文首字母拼写的,
# lx分明就是类型的简写。sort 是对某些字段排序可以忽略。分页的话2,200就是第二页,每页200条,onlySale就是可以卖出的条件。
http://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx?lx=1&sort=zdf,desc&page=2,100&onlySale=0
3 怎么抓取数据呢
这里我们使用python,需要安装的类库有 requests/demjson/prettytable/json,有没有特别简单呢?
# 安装命令如下
# 发起请求
pip install requests
# 将不是那么严格的json 格式转换为json
pip install demjson
# 格式化打印数据
pip install prettytable
# 将json 格式化的文本转换为json
pip install json
这里我可以上代码了,简单的逻辑就是先抓取api接口返回的信息,然后解析报文,将返回结果转换成json 格式后只选择需要获取的内容,最后将获取的结果进行输出即可。
import requests
import json
import demjson
from prettytable import PrettyTable
# 数据表格的列表表头字段
title_list = ["code", "name", "value"]
# 查询基金列表信息
def query_fund_list(page= 1):
req_url = "http://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx?lx=1&sort=zdf,desc&page={},20&onlySale=0".format(page)
response = requests.get(req_url)
# 输出响应头
# print(response.headers)
# 获取请求结果并替换,否则结果不能进行格式化json
resp_body = response.text.replace("var db=", "")
# 本来首选是这个json, 因为json 不支持 {a :"1"} 这样的转换,因此使用了 demojson
# json_data = json.loads(resp_body)
# 转换对象为 json 对象,使不规则的json格式化为json对象
resp_body = demjson.decode(resp_body)
# 获取结果数组
fund_list = resp_body["datas"]
body_list = []
for node in fund_list:
tmp = []
tmp.append(node[0])
tmp.append(node[1])
tmp.append(node[3])
body_list.append(tmp)
# 创建一个对象 PrettyTable 用于打印输出结果
bt = PrettyTable()
# 将表头信息信息放入bt 中
bt.field_names = title_list
# 将表格内容放置在 bt 中
bt.add_rows(body_list)
# 打印结果
print(bt)
if __name__ == "__main__":
# 这里只打印了第一页,循环打印结果就不写了,大家都会的
query_fund_list(1)
最终输出的结果如图所示
最终我们达到的结果就是这样的结果,有了这些结果,我们可以进行结构化存储,放进数据库中方面查询和使用。
基金代码 | 基金名称 | 最新净值 |
---|---|---|
005585 | 银河文体娱乐混合 | 1.6363 |
001907 | 国投瑞银境煊灵活配置混合A | 3.3055 |
001908 | 国投瑞银境煊灵活配置混合C | 3.1667 |
164818 | 工银中证传媒指数(LOF)A | 0.9231 |
... | ... | ... |
这是一个简单的开始,我们获取到了基金的列表。后续我们会抓取基金的基本信息和变动信息,建立模型去展现。