Есть 2 техники, которые я использую для "VBA".Я опишу их по одному.
1) Использование FireFox / Firebug Addon / Fiddler
2) Использование встроенного средства Excel для получения данных из Интернета
С этого постабудет прочитано многими, поэтому я даже покрою очевидное.Пожалуйста, не стесняйтесь пропустить любую часть, которую вы знаете
1) Использование FireFox / Firebug Addon / Fiddler
FireFox: http://en.wikipedia.org/wiki/FirefoxБесплатно скачать (http://www.mozilla.org/en-US/firefox/new/)
Firebug Addon: http://en.wikipedia.org/wiki/Firebug_%28software%29 Бесплатно скачать (https://addons.mozilla.org/en-US/firefox/addon/firebug/)
Fiddler: http://en.wikipedia.org/wiki/Fiddler_%28software%29 Бесплатно скачать (http://www.fiddler2.com/fiddler2/)
После того, как вы установили Firefox, установите Firebug Addon. Firebug Addon позволяет вам проверять различные элементы на веб-странице. Например, если вы хотите узнать имя кнопки, просто щелкните по ней правой кнопкой мыши и нажмите «Проверить»«Элемент с Firebug», и он предоставит вам все детали, которые вам понадобятся для этой кнопки.
Другим примером будет поиск имени таблицы на веб-сайте, который имеетданные, которые вам нужно удалить.
Я использую Fiddler только тогда, когда использую XMLHTTP. Это помогает мне видеть точную информацию, передаваемую при нажатии на кнопку. Из-за увеличения числа BOTS, которыецарапать сайты, большинство сайтов нетw, чтобы предотвратить автоматическую утилизацию, захватывайте координаты мыши и передавайте эту информацию, а Fiddler фактически помогает вам в отладке передаваемой информации.Я не буду здесь вдаваться в подробности, так как эту информацию можно использовать злонамеренно.
Теперь давайте рассмотрим простой пример того, как очистить URL, размещенный в вашем вопросе
http://www.espncricinfo.com/big-bash-league-2011/engine/match/524915.html
Сначала давайте найдем имя таблицы, в которой есть эта информация.Просто щелкните правой кнопкой мыши по таблице и нажмите «Проверить элемент с помощью 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
Теперь запустите пользовательскую форму и нажмите кнопку Command.Вы заметите, что данные сбрасываются в Sheet1.См. Снимок
Точно так же вы можете копировать и другую информацию.
2) Использование встроенного средства Excel для получения данных из Интернета
Я полагаю, что вы используете Excel 2007, поэтому я возьму это в качестве примера для очистки вышеупомянутой ссылки.
Перейдите к Sheet2.Теперь перейдите на вкладку «Данные» и нажмите на кнопку «Из Интернета» в крайнем правом углу.См. Снимок экрана.
Введите 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
Надеюсь, это поможет.Дайте мне знать, если у вас все еще есть какие-либо вопросы.
Сид