为了实现上述的场景,我们先看一看提供网页的信息:上述的网页中,我要提取的是红色框框起来表的数据,我们进行一下思路的分析:首先要建立一个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 NextNext提取表格的数据到工作表。6)Set IE = Nothing Set IEDOM = Nothing Set myTable = Nothing Set myTR = Nothing回收内存。对于回收内存的操作,建议大家利用,在大型的程序中,尤其是注意这点,内存占用过多会导致程序运行减缓。如果不释放内存就只能到END SUB时候再释放了,内存会不足。 代码截图: 通过上述的代码,就可以完成我们的思路。