欧易最新app下载网站
289.85MB · 2025-09-19
net/http
encoding/json
或 goquery
(爬网页时)encoding/csv
)time.Ticker
在实际场景中,我们可以选择以下方式:
这里以新浪财经接口为例(示例 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 main
import (
"encoding/csv"
"fmt"
"net/http"
"os"
"strings"
"time"
)
// 股票行情数据结构
type Stock struct {
Code string
Name string
Price string
High string
Low string
Open string
Prev string
}
func fetchStock(code string) (*Stock, error) {
url := "http://hq.sinajs.cn/list=" + code
resp, 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 []*Stock
for _, code := range codes {
stock, err := fetchStock(code)
if err != nil {
fmt.Println("获取失败:", err)
continue
}
fmt.Printf(" %s %s 当前价: %sn", 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
通过本案例,我们用 Go 实现了一个股票行情数据爬虫,涵盖了 HTTP 请求、字符串解析、定时任务、CSV 存储等常用技能。该项目不仅能作为金融数据分析的起点,也能进一步扩展成股票监控/预警系统。
289.85MB · 2025-09-19
281.41MB · 2025-09-19
281.64MB · 2025-09-19