当前位置: 首页 > news >正文

Go语言100个实战案例-项目实战篇:股票行情数据爬虫

在金融领域,获取股票行情数据是常见的需求。无论是做量化分析、数据可视化,还是构建自己的选股工具,都离不开数据源。本篇实战案例将带你用 Go 语言实现一个简易的股票行情数据爬虫,从公开接口或网页抓取股票实时行情并保存到本地。


功能目标

  1. 1. 从目标网站或 API 获取股票实时行情数据
  2. 2. 解析股票名称、代码、当前价格、涨跌幅等信息
  3. 3. 将结果保存为 CSV 文件,方便后续分析
  4. 4. 支持定时抓取,实现简单的数据更新

技术选型

  • • HTTP 请求net/http
  • • HTML/JSON 解析encoding/json 或 goquery(爬网页时)
  • • 数据存储:CSV 文件 (encoding/csv)
  • • 定时任务time.Ticker

示例数据源

在实际场景中,我们可以选择以下方式:

  • • 公开 API(如新浪财经、腾讯财经等,返回 JSON/JS 格式数据)
  • • 网页解析(直接解析 HTML 提取表格内容)

这里以新浪财经接口为例(示例 URL):

http://hq.sinajs.cn/list=sh601006

返回内容类似:

var hq_str_sh601006="大秦铁路,6.100,6.120,6.070,6.130,6.030,6.070,6.080,17819603,108442701.000,...";

核心代码实现

package mainimport ("encoding/csv""fmt""net/http""os""strings""time"
)// 股票行情数据结构
type Stock struct {Code   stringName   stringPrice  stringHigh   stringLow    stringOpen   stringPrev   string
}func fetchStock(code string) (*Stock, error) {url := "http://hq.sinajs.cn/list=" + coderesp, err := http.Get(url)if err != nil {return nil, err}defer resp.Body.Close()buf := make([]byte, 1024)n, _ := resp.Body.Read(buf)data := string(buf[:n])// 解析数据parts := strings.Split(data, "\"")if len(parts) < 2 {return nil, fmt.Errorf("无效数据: %s", data)}fields := strings.Split(parts[1], ",")if len(fields) < 6 {return nil, fmt.Errorf("字段不足")}stock := &Stock{Code:  code,Name:  fields[0],Open:  fields[1],Prev:  fields[2],Price: fields[3],High:  fields[4],Low:   fields[5],}return stock, nil
}func saveToCSV(stocks []*Stock, filename string) error {file, err := os.Create(filename)if err != nil {return err}defer file.Close()writer := csv.NewWriter(file)defer writer.Flush()// 写入表头writer.Write([]string{"代码", "名称", "当前价", "今开", "昨收", "最高", "最低"})// 写入数据for _, s := range stocks {writer.Write([]string{s.Code, s.Name, s.Price, s.Open, s.Prev, s.High, s.Low})}return nil
}func main() {codes := []string{"sh601006", "sz000001"} // 大秦铁路, 平安银行ticker := time.NewTicker(10 * time.Second) // 每 10 秒抓取一次defer ticker.Stop()for {select {case <-ticker.C:var stocks []*Stockfor _, code := range codes {stock, err := fetchStock(code)if err != nil {fmt.Println("获取失败:", err)continue}fmt.Printf("✅ %s %s 当前价: %s\n", stock.Code, stock.Name, stock.Price)stocks = append(stocks, stock)}saveToCSV(stocks, "stocks.csv")}}
}

运行效果

执行程序后,每隔 10 秒抓取一次行情,终端输出:

✅ sh601006 大秦铁路 当前价: 6.07
✅ sz000001 平安银行 当前价: 12.34

同时生成 stocks.csv 文件,内容示例:

代码,名称,当前价,今开,昨收,最高,最低
sh601006,大秦铁路,6.07,6.10,6.12,6.13,6.03
sz000001,平安银行,12.34,12.20,12.10,12.50,12.00

扩展功能

  1. 1. 支持更多股票代码,通过配置文件或命令行参数传入
  2. 2. 数据持久化:改为存入 MySQL/SQLite
  3. 3. 数据可视化:结合 ECharts 或 Go 的 Web 框架生成走势图
  4. 4. 并发抓取:用 goroutine 提升爬取速度
  5. 5. 异常处理:增加重试机制和日志记录

总结

通过本案例,我们用 Go 实现了一个股票行情数据爬虫,涵盖了 HTTP 请求、字符串解析、定时任务、CSV 存储等常用技能。该项目不仅能作为金融数据分析的起点,也能进一步扩展成股票监控/预警系统

http://www.dtcms.com/a/389352.html

相关文章:

  • Python开发最新 PyCharm 2025使用(附详细教程)
  • 【session基础】
  • 客户流失预警中uplift建模案例、入门学习(二)
  • SSH远程管理工具
  • 4644电源芯片的介绍和使用
  • MIPI D-PHY布线规则
  • 《深入理解Java虚拟机》第四章节读书笔记:虚拟机性能监控、故障处理工具
  • ​​[硬件电路-251]:电源相关常见的专业术语
  • 日志中的SQL语句直接转为可执行的SQL
  • Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践
  • Nginx-RTMP-Module开源项目全解析:从基础部署到企业级应用实践
  • 新代系统如何输入期限密码
  • 【C++】STL--stack(栈)queue(队列)使用及其重要接口模拟实现
  • 计算机组成原理:奔腾系列机的虚存组织
  • 架构模式的双雄会:Reactor与Proactor的高并发哲学
  • 【C++】STL详解(八)—stack和queue的模拟实现
  • 【LeetCode Hot100----08-二叉树篇中(06-10),包含多种方法,详细思路与代码,让你一篇文章看懂所有!】
  • ARM(12) - ADC 检测光照强度
  • 网格生成引擎:设计原则、关键组件
  • 【开发AI】Spring AI Alibaba:集成AI应用的Java项目实战
  • Spark专题-第二部分:Spark SQL 入门(2)-算子介绍-Scan/Filter/Project
  • Selenium 自动化爬虫:处理动态电商页面
  • 无需Selenium:巧用Python捕获携程机票Ajax请求并解析JSON数据
  • Python版Kafka基础班 - 学习笔记
  • IDEA 查看 Maven 依赖树与解决 Jar 包冲突
  • 【LVS入门宝典】LVS与Nginx、HAProxy的对比:四层(LVS) vs 七层(Nginx)的适用场景
  • 系统安全配置与加固
  • 【AI-Agent】AI游戏库
  • 病毒库更新原理
  • 服务器内存爆炸,日志无报错,通过分析 Dump 文件查找问题原因