VBA для копирования данных веб-сайта

Может ли кто-нибудь помочь указать мне в правильном направлении, как скопировать определенные данные с веб-сайта, чтобы листировать листы через VBA?

Я попытался использовать макрорекордер и веб-запрос, но он продолжает показывать сценарий ошибок, а желтая стрелка не отображается в той части, которую я хочу скопировать.

Это веб-сайт, который я пытаюсь скопировать http://etfdb.com/etf/EEM/#holdings

Я только хочу скопировать часть Top Ten Holdings.

Любая помощь будет принята с благодарностью. Заранее спасибо.

Изменить: Это мой текущий код, но ничего не появилось, может кто-нибудь сказать мне, что случилось?

Sub Get123() Dim oHtml As HTMLDocument Dim oElement As Object Set oHtml = New HTMLDocument With CreateObject("WINHTTP.WinHTTPRequest.5.1") .Open "GET", "http://etfdb.com/etf/EEM/#holdings", False .send oHtml.body.innerHTML = .responseText End With For Each oElement In oHtml.getElementsByClassName("holdings-left-content") ActiveSheet.Range("A1").Value = oElement.Value Next oElement End Sub 

Я не слишком хорошо знаком с запросом WINHTTP, но я предполагаю, что у вас проблемы, потому что он не ждет ответа с сервера.

Я, как правило, делаю веб-соскабливание таким образом:

 Sub extract() Dim IE As InternetExplorer Dim html As HTMLDocument Set IE = New InternetExplorerMedium IE.Visible = False IE.Navigate2 "http://etfdb.com/etf/EEM/#holdings" ' Wait while IE loading Do While IE.Busy Application.Wait DateAdd("s", 1, Now) Loop Set html = IE.document Set holdingsClass = html.getElementsByClassName("holdings-left-content") Range("A1").Value = holdingsClass(0).textContent 'Cleanup IE.Quit Set IE = Nothing End Sub 

Убедитесь, что у вас есть ссылка на:

  1. Microsoft Internet Controls
  2. Библиотека объектов Microsoft HTML

Поскольку класс содержит список, возвращаемый текст – все в одном элементе. Таким образом, результаты выглядят так:

введите описание изображения здесь


Вот один из способов разбить результаты на разные ячейки:

 Dim results As Variant results = Split(holdingsClass(0).textContent, vbLf) cntr = 1 For i = LBound(results) To UBound(results) If Trim(results(i)) <> "" Then Select Case Right(Trim(results(i)), 1) Case ":" Range("B" & cntr) = CStr(Trim(results(i))) Case "%" Range("C" & cntr).Value = Trim(results(i)) cntr = cntr + 1 Case 0 Range("C" & cntr).Value = Trim(results(i)) Case Else Range("A" & cntr).Value = Trim(results(i)) End Select End If Next i 

Результаты:

введите описание изображения здесь


объяснение

getElements... возвращает массив всех элементов html, соответствующих заданным критериям. В этом случае он возвращает все элементы с именем класса «holdings-left-content».

Поскольку существует только один элемент с этим именем класса, мы получаем доступ к первому элементу, используя (0) потому что это массив на основе нуля (0,1,2 для 3 элементов вместо 1,2,3).

Метод Split принимает весь текст в первом элементе массива и разделяет каждую строку на другой массив (результаты), используя возврат каретки vbLf в качестве разделителя.

Теперь мы просто просматриваем массив результатов и отображаем каждую строку текста. Select Case просто помогает нам узнать, какой столбец отображает следующую строку текста для хорошо отформатированного отображения.

Я попробовал этот метод здесь, но он не работал для меня. Я нашел Pull Web Page Into Worksheet на Ozgrid от пользователя JerryD, и я включил его здесь для дальнейшего использования.

 Sub Test() Dim IE As Object Sheets("Sheet3").Select Range("A1:A1000") = "" ' erase previous data Range("A1").Select Set IE = CreateObject("InternetExplorer.Application") With IE .Visible = True .Navigate "http://www.aarp.org/" ' should work for any URL Do Until .ReadyState = 4: DoEvents: Loop End With IE.ExecWB 17, 0 '// SelectAll IE.ExecWB 12, 2 '// Copy selection ActiveSheet.PasteSpecial Format:="Text", link:=False, DisplayAsIcon:=False Range("A1").Select IE.Quit End Sub 
  • Рабочая тетрадь Excel для html Django / Python
  • Скопировать данные из HTML
  • Хотите предоставить экспорт в Excel с несколькими комментариями в одной ячейке Excel
  • VBA: обзор кода (проблема идентификации элемента HTML)
  • Не удается экспортировать таблицу html в excel с помощью jQuery
  • Как вставить данные из excel в таблицу html?
  • Excel для преобразования объектов HTML в текст
  • Как я могу применить более одного класса для элемента для HTML, который должен быть прочитан в Excel?
  • Есть ли какой-нибудь JQuery, который поможет встраивать таблицу Excel в веб-страницу?
  • экспортировать изображения с данными из Mysql в Excel с помощью php
  • VBA - проверка флажка в IE
  • Interesting Posts
    Давайте будем гением компьютера.