Скопировать текст с веб-сайта с помощью Excel VBA?

Я довольно новичок в использовании Excel в качестве скребка для веб-страниц, но я нашел эту очень интересную статью, объясняющую, как очищать определенные теги с веб-сайта с помощью Excel VBA. У меня есть код ниже, который отлично работает, но он получает контент только из первого <p> который он находит:

 Sub get_title_header() Dim wb As Object Dim doc As Object Dim sURL As String Dim lastrow As Long lastrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lastrow Set wb = CreateObject("internetExplorer.Application") sURL = Cells(i, 1) wb.navigate sURL wb.Visible = True While wb.Busy DoEvents Wend 'HTML document Set doc = wb.document Cells(i, 2) = doc.title On Error GoTo err_clear Cells(i, 3) = doc.GetElementsByTagName("p")(0).innerText err_clear: If Err <> 0 Then Err.Clear Resume Next End If wb.Quit Range(Cells(i, 1), Cells(i, 3)).Columns.AutoFit Next i End Sub 

Теперь то, что я хотел бы сделать, это отредактировать код и сделать скребок получить все содержимое, которое находится в <p> tag на веб-странице. Поэтому я предполагаю, что какая-то функция foreach отсутствует.

Надеюсь, кто-то здесь хочет помочь мне расширить код, чтобы содержимое из нескольких тегов <p> было собрано.

UPDATE Ниже рабочего кода!

 Sub get_title_header() Dim wb As Object Dim doc As Object Dim sURL As String Dim lastrow As Long Dim i As Integer lastrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lastrow Set wb = CreateObject("internetExplorer.Application") sURL = Cells(i, 1) wb.navigate sURL wb.Visible = True While wb.Busy DoEvents Wend 'HTML document Set doc = wb.document Cells(i, 2) = doc.Title On Error GoTo err_clear Dim el As Object For Each el In doc.GetElementsByTagName("p") counter = counter + 1 Cells(i, counter + 2).Value = Cells(counter + 1).Value & el.innerText Next el counter = 0 err_clear: If Err <> 0 Then Err.Clear Resume Next End If wb.Quit Range(Cells(i, 1), Cells(i, 10)).Columns.AutoFit Next i End Sub 

Ты почти там! doc.GetElementsByTagName("p") возвращает коллекцию объектов HTMLParagraphElement к которой вы обращались к первой записи, используя doc.GetElementsByTagName("p")(0) . Как вы намекаете, цикл For Each позволит вам обращаться к каждому по очереди:

 Sub get_title_header() Dim wb As Object Dim doc As Object Dim sURL As String Dim lastrow As Long Dim i As Integer lastrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lastrow Set wb = CreateObject("internetExplorer.Application") sURL = Cells(i, 1) wb.navigate sURL wb.Visible = True While wb.Busy DoEvents Wend 'HTML document Set doc = wb.document Cells(i, 2) = doc.Title On Error GoTo err_clear Dim el As Object For Each el In doc.GetElementsByTagName("p") Cells(i, 3).Value = Cells(i, 3).Value & ", " & el.innerText Next el err_clear: If Err <> 0 Then Err.Clear Resume Next End If wb.Quit Range(Cells(i, 1), Cells(i, 3)).Columns.AutoFit Next i End Sub 
  • Как я могу очистить суб-заголовки от этой ссылки?
  • Импорт таблицы из Интернета в Excel с помощью VBA
  • excel vba копирование информации отслеживания FedEx
  • Импорт веб-данных в Excel без перезаписи истории
  • Excel, VBA: как очистить определенные данные от нескольких html-сайтов, принадлежащих одному домену
  • Форматирование очищенных данных HTML в excel с использованием VBA - не будет отображаться должным образом
  • Комплексная веб-скребка VBA
  • Скремблирование innerHTML с сайтов с использованием VBA
  • Введите форму Javascript на веб-странице, используя VBA
  • VBA для очистки данных с сайта - ошибка при пустых данных
  • VBA Web Scrape (getelementsbyclassname)
  • Давайте будем гением компьютера.