最近不是对基金比较感兴趣嘛就想着能不能自己搞点数据分析分析,看看能不能找到点门道。第一步就是得把基金的每日净值给搞下来。盯上了数米网,感觉它家数据还挺全的,更新也快。
说干就干,先是打开数米网,找着基金净值的页面。然后就开始琢磨,这网页上的数据,怎么才能批量地扒下来?最开始想着用requests库直接请求网页,然后用BeautifulSoup解析HTML。结果发现,数米网的数据好像是动态加载的,直接请求HTML,啥也捞不着。
得了,看来得换个思路。既然是动态加载,那肯定是通过JavaScript发起的请求。打开开发者工具,切到Network面板,刷新一下网页。果然看到了一堆请求。一个个翻,看看哪个请求返回的是基金净值数据。找了半天,终于找到了一个JSON格式的接口,里面包含了基金代码、净值、涨幅等等信息。
找到接口就好办了。用requests库模拟请求这个接口,把返回的JSON数据解析出来。一开始直接用的*(),结果发现返回的数据是乱码。折腾了半天,才发现是编码问题。数米网的接口返回的是GBK编码,而requests默认用的是UTF-8。加上* = 'GBK'
,问题解决。
数据拿到了,接下来就是保存了。本来想着直接存到CSV文件里,后来一想,数据量大了,CSV文件不好管理。干脆,直接存到MySQL数据库里。建了一个fund_net_value表,包含fund_code(基金代码)、net_value(净值)、date(日期)这些字段。
用pymysql连接数据库,写了一个函数,把解析出来的基金净值数据一条条地插入到数据库里。为了防止重复插入,先查询一下数据库里有没有当天的数据,没有才插入。
都搞定了之后,写了一个简单的脚本,每天定时运行。这样,每天收盘后,就能自动把数米网的基金净值数据抓取下来,保存到数据库里了。
这只是个最简单的版本。后面还可以加上更多功能,比如自动更新基金列表、增加数据清洗功能等等。慢慢来嘛先把数据搞到手再说!
这回实践主要做了这么几件事:
- 分析数米网的网页结构,找到包含基金净值数据的接口。
- 使用requests库请求接口,解决GBK编码问题。
- 使用pymysql连接MySQL数据库,将数据保存到数据库中。
- 编写定时脚本,实现每日自动抓取数据。
虽然过程有点曲折,但还是成功了。感觉自己又进步了一点点!
还没有评论,来说两句吧...