【分享成果,随喜正能量】遇到不可理喻的事情,接受,处理,远离,不追问。最后这三个字,是生活教会我的最重要的三个字。。
《VBA信息获取与处理》教程是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪贴板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。
教程共两册,八十四讲。今日的内容是专题九“利用IE抓取网络数据”:深市股票涨跌数据的抓取
第三节 利用IE,抓取深市股票涨跌数据大家好,这讲讲解的是利用IE,抓取深市股票涨跌数据,利用的方法和上一讲基本类似,主要是给大家介绍一种实用的场景,供大家选择利用。
实用场景:在玩股票的时候,经常要看每天股票涨幅领头的股票,以便分析各种对应,要求利用IE实现提取某网站股票的领涨股票数据,将这些数据放到工作表中以备选查看。选择的网址是:https://q.stock.sohu.com/ 即搜狐网的数据。
1 应用IE实现抓取深市股票涨跌数据的思路分析为了实现上述的场景,我们先看一看提供网页的信息:
上述的网页中,我要提取的是红色框框起来表的数据,我们进行一下思路的分析:首先要建立一个IE对象,然后将网页文档提取出来,在网页文档上提取第二个表的数据,即可。提取表数据的时候可以模拟真正工作表的行列循环,依次提取数据,在我之前的讲解中提到myTR.Cells.Length是指单元格的个数,Cells(j).innertext是指单元格的内容。这两点在写代码的时候要注意。
另外,在抓取网页文档的表时可以采用getElementsByTagName("TABLE")(2)的方法,这种方法是查找数据是返回包含带有指定标签名称的所有元素的节点列表。在之前的讲解中我一共讲了三种类似的方法,如下
getElementById(id) 获取带有指定 id 的节点(元素)
getElementsByTagName() 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。
getElementsByClassName() 返回包含带有指定类名的所有元素的节点列表。
ByTagName 是上述的第二种方法,利用较多的还有第一种。
2 应用IE实现抓取深市股票涨跌数据的代码实现为了实现上述的思路,我给出了下面的代码:
Sub myNZA() '利用IE,抓取深市股票涨跌数据
Sheets("SHEET2").Select
Dim IE, IEDOM As Object
Dim myTable, myTR As Object
Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = False
.navigate "http://q.stock.sohu.com/"
Do Until .readystate = 4
DoEvents
Loop
Set IEDOM = .document
End With
Cells.ClearContents
Set myTable = IEDOM.getElementsByTagName("TABLE")(2)
For Each myTR In myTable.Rows
i = i + 1
For j = 0 To myTR.Cells.Length - 1
Cells(i, j + 1) = myTR.Cells(j).innertext
Next
Next
Set IE = Nothing
Set IEDOM = Nothing
Set myTable = Nothing
Set myTR = Nothing
MsgBox "ok!"
End Sub
代码的讲解:
1)Set IE = CreateObject("InternetExplorer.Application") 建立IE 的引用。
2).Visible = False
.navigate "http://q.stock.sohu.com/"
Do Until .readystate = 4
DoEvents
Loop
上述代码令浏览器可见,加载网址http://q.stock.sohu.com/,一直到加载完成,其中的DoEvents 是避免软死机的现象出现。
3)Set IEDOM = .document 提出网页文档数据
4)Set myTable = IEDOM.getElementsByTagName("TABLE")(2) 提取网页文档的第二个表格
5)For Each myTR In myTable.Rows
i = i + 1
For j = 0 To myTR.Cells.Length - 1
Cells(i, j + 1) = myTR.Cells(j).innertext
Next
Next
提取表格的数据到工作表。
6)Set IE = Nothing
Set IEDOM = Nothing
Set myTable = Nothing
Set myTR = Nothing
回收内存。对于回收内存的操作,建议大家利用,在大型的程序中,尤其是注意这点,内存占用过多会导致程序运行减缓。如果不释放内存就只能到END SUB时候再释放了,内存会不足。
代码截图:
通过上述的代码,就可以完成我们的思路。
3 应用IE实现抓取深市股票涨跌数据的实现效果当我们点击运行按钮,如图的箭头所示,程序就会开始运行,抓取网页数据到工作表中
从而验证了我们思路的正确。
本节知识点回向:如何在页面文档中提取表的数据?
本节内容参考:009工作表.xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:
【分享成果,随喜正能量】成年人的世界,钱是活下去的筹码,并非多爱钱,只是无奈,
没钱寸步难行,一睁开眼就需要钱的年代,不怕没命,就怕没钱。。