我之所以开始这个题目,是因为我又看到有人问起如何从WEB中取数据了。随着炒股的人越来越多,可能很多人喜欢用EXCEL来分析股票信息。可是,如何得到股价信息呢?这又是一个问题。 我之前看到的程序,都是从类似business.sohu.com或finance.sina.com.cn中取数据。用XMLHTTP读取大段的网页然后进行数据分离。这种做是对的,但是却不是最快的。要知道用XMLHTTP读取数据的过程,其实就是你打开网页的过程。你打开网页有多快,XMLHTTP就有多快。因此,如何获取最低层的那个GET是最重要的。 经过一段时间的努力,我找到了金融街网站的股票数据信息的最底层的那个GET,速度快,底层的返回数据没有一句http语言,纯文本,易于处理。 现在就将这两个函数公开,希望能对用到的朋友提供一点帮助。 对于其他网页数据的获取,请参照下面的GetHttp函数。只需要在函数参数中加入自己的网址就行了。另外,如果你是经常需要从不同的网页获取数据,为了便于处理得到的文本,建议学习一下“正则表达式”,我们论坛上用的。 好了,言归正传。下面就介绍这两个函数。
取金融街某支股票当天数据的函数Jrj0DayData 函数使用说明 - 参数StockCode输入股票代码
- 函数以数组形式返回当天数据
Function Jrj0DayData(ByRef StockCode As String) Dim Url As String Url = " http://quote.jrj.com.cn/htmdata/html/" & StockCode & ".htm" Url = GetHttp(Url) Jrj0DayData = Split(Url, ",") End Function 返回的数组有元素38个,数组元素含义如下: 数组的各元素的含义如下所示: Debug.Print "日期" & arrA(1) Debug.Print "时间" & arrA(2) Debug.Print "成交价" & arrA(3) Debug.Print "现手" & arrA(4) Debug.Print "涨跌" & arrA(5) Debug.Print "幅度" & arrA(6) Debug.Print "均价" & arrA(7) Debug.Print "总量" & arrA(8) Debug.Print "金额" & arrA(9) Debug.Print "主买或外盘" & arrA(10) Debug.Print "主卖或内盘" & arrA(11) Debug.Print "昨收" & arrA(12) Debug.Print "开盘" & arrA(13) Debug.Print "最高" & arrA(14) Debug.Print "最低" & arrA(15) Debug.Print "委比" & arrA(16) Debug.Print "委差" & arrA(17) Debug.Print "量比" & arrA(18) '下面的格式就是买卖交替,从19-38 Debug.Print "买①" & arrA(19) Debug.Print "买①量" & arrA(20) Debug.Print "卖①" & arrA(21) Debug.Print "卖①量" & arrA(22)
可以说,这一个数组已经包括了某支股票当日的基本信息,比较全了。 第二个函数,获取历史价格信息 金融街取某一股票80天数据的函数 用法:参数StockCode输入某股票代码。函数以数组形式返回80天数据,数组每个元素中存贮着类似(2007-04-20 开:48.23 高:50.79 低:48.00 收:50.27 量:461974 额:228812.67 )的数据。 Function Jrj80DayData(ByRef StockCode As String) Dim Url As String Dim objREGEXP As Object Url = " http://chart.jrj.com/htmdata/KLINE/ " & StockCode & ".js" Url = GetHttp(Url) Set objREGEXP = CreateObject("VBSCRIPT.REGEXP") With objREGEXP .Global = True .Pattern = "[a\[][^\]]*[\]]" Url = .Replace(Url, "") End With Set objREGEXP = Nothing Url = Replace(Url, "= ", "") Url = Replace(Url, """", "") Url = Replace(Url, Chr(13), "") Url = Replace(Url, ";", "") Jrj80DayData = Split(Url, Chr(10)) End Function 函数返回的数组有80个元素,从0-79中依次存着类似2007-04-20 开:48.23 高:50.79 低:48.00 收:50.27 量:461974 额:228812.67
这样的内容。至于你要事先显示此字符串还是要只取数据进行分析,那就随你自己了。 前面两个函数的运用,是要用到下面的这两个函数的。这两个函数是必须的。一个是xmlhttp组件的运用,一个是纠正乱码的。 Function GetHttp(Url) Dim objXML On Error Resume Next Set objXML = CreateObject("Microsoft.XMLHTTP") With objXML .Open "Get", Url, False, "", "" .Send GetHttp = .ResponseBody End With GetHttp = BytesToBstr(GetHttp, "GB2312") Set objXML = Nothing On Error GoTo 0 End Function Function BytesToBstr(strBody, CodeBase) Dim objStream Set objStream = CreateObject("Adodb.Stream") With objStream .Type = 1 .Mode = 3 .Open .Write strBody .Position = 0 .Type = 2 .Charset = CodeBase BytesToBstr = .ReadText End With objStream.Close Set objStream = Nothing End Function
|