我对“VBA”使用了 2 种技术。我将一一描述。
1) 使用 FireFox / Firebug Addon / Fiddler
2) 使用 Excel 的内置工具从 Web 获取数据
由于这篇文章会被很多人阅读,所以我什至会介绍显而易见的内容。请随意跳过您知道的任何部分
1) 使用 FireFox / Firebug 插件 / Fiddler
火狐:http://en.wikipedia.org/wiki/Firefox
免费下载(http://www.mozilla.org/en-US/firefox/new/)
萤火虫插件:http://en.wikipedia.org/wiki/Firebug_%28software%29
免费下载 (https://addons.mozilla.org/en-US/firefox/addon/firebug/)
提琴手:http://en.wikipedia.org/wiki/Fiddler_%28software%29
免费下载(http://www.fiddler2.com/fiddler2/)
安装 Firefox 后,请安装 Firebug 插件。 Firebug 插件可让您检查网页中的不同元素。例如,如果您想知道按钮的名称,只需右键单击它并单击“Inspect Element with Firebug”,它将为您提供该按钮所需的所有详细信息。
另一个示例是在网站上查找包含您需要报废的数据的表的名称。
我只在使用 XMLHTTP 时才使用 Fiddler。当您单击按钮时,它可以帮助我查看传递的确切信息。由于抓取网站的机器人数量增加,现在大多数网站为了防止自动抓取,捕获您的鼠标坐标并传递该信息,fiddler 实际上可以帮助您调试正在传递的信息。我不会在这里详细介绍它,因为这些信息可能会被恶意使用。
现在让我们举一个简单的例子来说明如何抓取问题中发布的 URL
http://www.espncricinfo.com/big-bash-league-2011/engine/match/524915.html
首先让我们找到包含该信息的表的名称。只需右键单击表格并单击“Inspect Element with Firebug”,它将为您提供以下快照。
所以现在我们知道我们的数据存储在一个名为“inningsBat1”的表格中。如果我们可以将该表格的内容提取到 Excel 文件中,那么我们绝对可以使用这些数据进行分析。这是将表格转储到 Sheet1 中的示例代码
在我们继续之前,我建议关闭所有 Excel 并启动一个新实例。
启动 VBA 并插入一个用户窗体。放置一个命令按钮和一个浏览器控件。您的用户表单可能如下所示
将此代码粘贴到用户窗体代码区
Option Explicit
'~~> Set Reference to Microsoft HTML Object Library
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub CommandButton1_Click()
Dim URL As String
Dim oSheet As Worksheet
Set oSheet = Sheets("Sheet1")
URL = "http://www.espncricinfo.com/big-bash-league-2011/engine/match/524915.html"
PopulateDataSheets oSheet, URL
MsgBox "Data Scrapped. Please check " & oSheet.Name
End Sub
Public Sub PopulateDataSheets(wsk As Worksheet, URL As String)
Dim tbl As HTMLTable
Dim tr As HTMLTableRow
Dim insertRow As Long, Row As Long, col As Long
On Error GoTo whoa
WebBrowser1.navigate URL
WaitForWBReady
Set tbl = WebBrowser1.Document.getElementById("inningsBat1")
With wsk
.Cells.Clear
insertRow = 0
For Row = 0 To tbl.Rows.Length - 1
Set tr = tbl.Rows(Row)
If Trim(tr.innerText) <> "" Then
If tr.Cells.Length > 2 Then
If tr.Cells(1).innerText <> "Total" Then
insertRow = insertRow + 1
For col = 0 To tr.Cells.Length - 1
.Cells(insertRow, col + 1) = tr.Cells(col).innerText
Next
End If
End If
End If
Next
End With
whoa:
Unload Me
End Sub
Private Sub Wait(ByVal nSec As Long)
nSec = nSec + Timer
While Timer < nSec
DoEvents
Sleep 100
Wend
End Sub
Private Sub WaitForWBReady()
Wait 1
While WebBrowser1.ReadyState <> 4
Wait 3
Wend
End Sub
现在运行您的用户窗体并单击命令按钮。您会注意到数据被转储到 Sheet1 中。查看快照
同样,您也可以抓取其他信息。
2) 使用 Excel 的内置工具从网络获取数据
我相信您使用的是 Excel 2007,因此我将以此为例来抓取上述链接。
导航到 Sheet2。现在导航到数据选项卡,然后单击最右侧的“来自 Web”按钮。查看快照。
在“New Web Query Window”中输入url,点击“Go”
页面上传后,单击快照中显示的小箭头,选择您要导入的相关表。完成后,点击“导入”
然后,Excel 会询问您要将数据导入到哪里。选择相关单元格,然后单击“确定”。你完成了!数据将被导入到您指定的单元格中。
如果您希望可以录制宏并自动执行此操作 :)
这是我录制的宏。
Sub Macro1()
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.espncricinfo.com/big-bash-league-2011/engine/match/524915.html" _
, Destination:=Range("$A$1"))
.Name = "524915"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = """inningsBat1"""
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub
希望这会有所帮助。如果您仍有疑问,请告诉我。
席德