Можем ли мы получить указанные данные c с помощью URL в VBA - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть 15 разных URL, и мне нужно получить цену с определенного веб-сайта в Excel для определенного столбца, не могли бы вы мне помочь. Это моя первая программа VBA, и я пытаюсь, но она показывает мою синтаксическую ошибку

Sub myfile()    
    Dim IE As New InternetExplorer  Dim url As String  Dim item As
    HTMLHtmlElement  Dim Doc As HTMLDocument  Dim tagElements As Object 
    Dim element As Object  Dim lastRow    Application.ScreenUpdating =
    False  Application.DisplayAlerts = False  Application.EnableEvents =
    False  Application.Calculation = xlCalculationManual    url =
    "https://wtb.app.channeliq.com/buyonline/D_nhoFMJcUal_LOXlInI_g/TOA-60?html=true"

    IE.navigate url    IE.Visible = True    Do  DoEvents  Loop Until
    IE.readyState = READYSTATE_COMPLETE

    Set Doc = IE.document

    lastRow = Sheet1.UsedRange.Rows.Count + 1    Set tagElements =
    Doc.all.tags("tr")  For Each element In tagElements

      If InStr(element.innerText, "ciq-price")> 0 And
    InStr(element.className, "ciq-product-name") > 0 Then

        Sheet1.Cells(lastRow, 1).Value = element.innerText
        ' Exit the for loop once you get the temperature to avoid unnecessary processing
        Exit For   End If  Next

    IE.Quit  Set IE = Nothing    Application.ScreenUpdating = True 
    Application.DisplayAlerts = True  Application.EnableEvents = True 
    Application.Calculation = xlCalculationAutomatic
End Sub

1 Ответ

0 голосов
/ 06 февраля 2020

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

Я не могу объяснить все о веб-очистке с VBA здесь. Пожалуйста, начните свою регистрацию для получения информации с "Excel vba Web Scraping" и "Document Object Model". Далее вам нужно знать о HTML и CSS. В лучшем случае также о JavaScript:

Сообщение об ошибке пользовательский тип не определен ocours, потому что вы используете раннее связывание без ссылки на библиотеки Microsoft HTML Object Библиотека и Microsoft Inte rnet Элементы управления . Вы можете прочитать здесь, как установить ссылку через Инструменты -> Ссылки ... и о различиях между ранним и поздним связыванием Раннее связывание v / s Позднее связывание , а также более подробную информацию от Microsoft Использование раннего и позднего связывания в Automation

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

Option Explicit

Sub myfile()
  Dim IE As Object
  Dim url As String
  Dim tagElements As Object
  Dim element As Object
  Dim item As Object
  Dim lastRow As Long

  lastRow = ActiveSheet.UsedRange.Rows.Count + 1
  url = "https://wtb.app.channeliq.com/buyonline/D_nhoFMJcUal_LOXlInI_g/TOA-60?html=true"

  Set IE = CreateObject("internetexplorer.application")
  IE.navigate url
  IE.Visible = True
  Do: DoEvents: Loop Until IE.readyState = 4

  Set tagElements = IE.document.getElementsByClassName("ciq-online-offer-item  ")

  For Each element In tagElements
    Set item = element.getElementsByTagName("td")(1)
    ActiveSheet.Cells(lastRow, 1).Value = Trim(item.innerText)
    lastRow = lastRow + 1
  Next

  IE.Quit
  Set IE = Nothing
End Sub

Изменить на секунду Пример: Новая ссылка ведет к предложению. Я предполагаю, что цена продукта должна быть получена. Для этого не нужен l oop. Вам просто нужно выяснить, в каком сегменте HTML цена, а затем вы можете решить, как ее получить. В конце концов, есть только две строки VBA, которые записывают цену в таблицу Excel.

Я в Германии, и Excel автоматически установил знак валюты от доллара к евро. Это конечно неправильно. В зависимости от того, где вы находитесь, это может быть перехвачено.

Sub myfile2()
  Dim IE As Object
  Dim url As String
  Dim tagElements As Object
  Dim lastRow As Long

  lastRow = ActiveSheet.UsedRange.Rows.Count + 1
  url = "https://www.wayfair.com/kitchen-tabletop/pdx/cuisinart-air-fryer-toaster-oven-cui3490.html"

  Set IE = CreateObject("internetexplorer.application")
  IE.navigate url
  IE.Visible = True
  Do: DoEvents: Loop Until IE.readyState = 4
  'Break for 3 seconds
  Application.Wait (Now + TimeSerial(0, 0, 3))

  Set tagElements = IE.document.getElementsByClassName("BasePriceBlock BasePriceBlock--highlight")(0)
  ActiveSheet.Cells(lastRow, 1).Value = Trim(tagElements.innerText)

  IE.Quit
  Set IE = Nothing
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...