• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

我的go练手项目--使用go获取东方财富网站基金净值数据

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

代码我放在https://github.com/kingstarer/kingstarer/tree/master/go/getFundValue

这里简单介绍一下思路和关键代码

浏览东财网站时,按f12,可以发现东财使用的是前后端分离技术:用户访问网页时,只下载基本的网页数据,通过ajax技术在网页加载完后使用js异步获取基金净值数据

净值数据是json串,所以我们只需要使用net/http提供的http客户端发起请求并使用encoding/json对json做解析即可

稍微需要注意的是,东方限制了浏览器类型,并且有防盗链机制,所以记得设置好http请求头的信息。

(各位如果也想从东财抓数据,请注意程序访问频率,免得给人家服务器造成太大压力,别上演“公地悲剧”)

//用来存储从东方财富获取的基金数据
var FundInfoObject JsonFundList

func GetFundValue(fundCode, startDate, endDate string) (err error) {
	if len(startDate) != 8 || len(endDate) != 8 {
		return errors.New(fmt.Sprintf("开始结束日期必须是yyyymmdd格式"))
	}

	//拼装请求网址
	realStartDate := fmt.Sprintf("%s-%s-%s", startDate[0 : 4], startDate[4 : 6], startDate[6 : 8])
	realEndDate := fmt.Sprintf("%s-%s-%s", endDate[0 : 4], endDate[4 : 6], endDate[6 : 8])
	realUrl := fmt.Sprintf(FundConfig.URL, fundCode, realStartDate, realEndDate)

	//准备发送请求
	client := &http.Client{}
	reqest, err := http.NewRequest("GET", realUrl, nil)
	if err != nil {
		return err
	}

	//必须设置好http头 不然返回会失败
	reqest.Header.Add("Referer", "http://fundf10.eastmoney.com/")
	reqest.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36")
	//获取出返回的报文
	fmt.Println("开始获取数据:", realUrl)
	resp, err := client.Do(reqest)
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println(err)
	}

	strBody, bodyLen := string(body), len(body)

	//取出返回报文里面的Json
	nJsonStartPos := strings.Index(strBody, FundConfig.JsonStartKey) + len(FundConfig.JsonStartKey)
	nJsonEndPos := strings.LastIndex(strBody, FundConfig.JsonEndKey)

	if nJsonStartPos >= bodyLen || nJsonEndPos <= 0 || nJsonStartPos >= nJsonEndPos {
		return errors.New(fmt.Sprintf("返回报文中截取Json失败 起始位置%d %d", nJsonStartPos, nJsonEndPos))
	}

	//解析json
	err = parseFundJson(body[nJsonStartPos : nJsonEndPos])
	if err != nil {
		return err
	}

	return nil
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go net/http代理发布时间:2022-07-10
下一篇:
Go:内存管理与内存清理发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap