大家都多多少少会买点基金或者去开个户买点股票。大家都是普通人也没有什么后台内幕消息,经常被割韭菜。不想被割就得去分析各种资料文档。本文就是在天天基金网上抓取基金购买的股票信息。
股票有风险,入市需谨慎。基金有风险,入市需谨慎。
模块
话不多说先上需要调用到的模块。
1 |
|
首页抓取
在天天基金中找到开放式基金,如下图,一共有 9340 支基金。
打开控制面板,找到 http://fund.eastmoney.com/data/rankhandler.aspx?op=ph&dt=kf&ft=all&rs=&gs=0&sc=6yzf&st=desc&sd=2020-11-18&...
的地址,这个地址返回的结果就是表格中的基金数据。
返回的数据类似于 json 串,根据观察基金代码似乎都是 6 位的数字,就可以使用正则表达式取到。
1 |
|
股票持仓抓取
随便点开一个基金查看详情,然后往下拉到股票持仓的位置
点开后,可以发现这个页面的网址是 http://fundf10.eastmoney.com/ccmx_ 加上 基金代码。
- 前海开源新经济混合A:http://fundf10.eastmoney.com/ccmx_000689.html
- 平安转型创新混合A: http://fundf10.eastmoney.com/ccmx_004390.html
所以只需要解析首页的基金代码,加上前面的 http://fundf10.eastmoney.com/ccmx_ 就可以得到最终的股票投资明细页面地址。一共是 9000 多条数据。
1 |
|
打开股票持仓页面就会发现这里面的数据是 js 加载的。这里需要抓取基金名称和股票名称。
小编在这里采用了 selenium 方式抓取内容。用 xpath 解析页面。selenium 抓取速度比起 requests 方式是有点慢的,所以在这里开了多线程抓取。一共 10 个线程,每个线程抓取 1000 条数据。
1 |
|
抓取并解析页面后的内容是放在 text 文件中的,最后再读取处处理数据。当然抓取的内容直接放在数据库是最好的,这样就不用再去解析一下文本文件。
1 |
|
示例结果
解析文件
这步骤感觉有点多余,如果存在数据库中只需要一个查询语句就可以了。读取 fund 文件夹下的所有文件,并且一行一行用 eval() 转为字典。最终算出 9000 多基金中购买各个股票的有几家基金。
1 |
|
示例结果
stock.csv
fund.csv
总结
股票有风险,入市需谨慎。基金有风险,入市需谨慎。