我有2种技术用于“VBA”。我会一一介绍他们。
1)使用Firefox/Firebug的附加组件/提琴手
2)使用Excel的内置工具从网上
获取数据由于这篇文章会被很多人读,所以我甚至将覆盖明显。请随时跳过你知道什么部分
1)使用Firefox/Firebug的附加组件/提琴手
火狐:http://en.wikipedia.org/wiki/Firefox 免费下载(http://www.mozilla.org/en-US/firefox/new/)
Firebug的附加组件: 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 Addon让你检查网页中的不同元素。例如,如果您想知道按钮的名称,只需右键单击它并单击“使用Firebug检查元素”,它会为您提供该按钮所需的所有详细信息。
另一个例子是一个网站,有你需要报废的数据上找到一个表的名称。
我只在使用XMLHTTP时才使用Fiddler。它可以帮助我查看点击按钮时传递的确切信息。由于刮擦站点的BOTS数量增加,现在大多数站点为了防止自动报废,捕获鼠标坐标并传递该信息,小提琴手实际上可以帮助您调试正在传递的信息。我不会在这里详细介绍它,因为这些信息可以被恶意使用。
现在,让我们对如何刮网址张贴在你的问题
http://www.espncricinfo.com/big-bash-league-2011/engine/match/524915.html
首先,让我们发现其具有信息表的名字一个简单的例子。只需右键单击表格并点击“用Firebug检查元素”,它会给你下面的快照。
所以,现在我们知道,我们的数据存储在一个名为“inningsBat1”如果我们能提取出表的内容到Excel文件,然后我们就可以肯定是与数据合作,尽我们的分析表。这里是示例代码,它将转储Sheet1中的表格
在我们继续之前,我会建议关闭所有Excel并启动一个新实例。
启动VBA并插入一个用户窗体。放置一个命令按钮和一个webcrowser控件。您的用户窗体可能是这样的
粘贴用户窗体代码区
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查询窗口”输入URL,然后单击“转到”
一旦页面上传,选择您想通过点击小导入相关的表箭头如快照中所示。完成后,点击“导入”
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
希望这有助于。如果您仍然有疑问,请告诉我。
希德
只是一个简单的查询,我以为爬行的Cricinfo是非法的! – 2016-11-01 15:42:10