VBA - Web Scraping: innertext - PullRequest
       77

VBA - Web Scraping: innertext

1 голос
/ 01 мая 2020

Я работаю над частным проектом VBA-Web-Scraping, и мне нужна поддержка.

Какова моя цель: Я хотел бы получить обзор цен на недвижимость для определенного c региона. Поэтому я создал VBA, которая переводит цены в список и составляет статистику c. Моя программа может очистить указанную c ссылку на цену, площадь и т. Д.

На следующем шаге я хотел бы автоматически создать этот список ссылок с помощью VBA. Для этого шага мне нужно извлечь exposeIDs в Excel. Но это не сработает ...

Моя кодировка:

Option Explicit

Sub ExposeID()
Dim browser As Object   'Aufnehmen der verwendeten Instanz des Browsers (Internet Explorer)
Dim knotenAst As Object 'Aufnehmen einer HTML Struktur aus dem Browser Dokument
Dim url As String       'Aufnehmen der auszulesenden Adresse
Dim ExposeID As String

url = "https://www.immobilienscout24.de/Suche/de/niedersachsen/oldenburg-oldenburg/haus-kaufen?pagenumber=1"
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.navigate url
Do Until browser.readyState = 4: DoEvents: Loop

Set knotenAst = browser.document.getElementsByClassName("is24-res-list is24-res-gallery result-list border-top")(0).getElementsBytagName("li")

'ExposeID
 If Not knotenAst Is Nothing Then
 ExposeID = Trim(knotenAst.innerText)

 Else
 ExposeID = "KeinWert"
 End If
 MsgBox ExposeID, vbOKCancel

'Aufräumen
browser.Quit
Set browser = Nothing
Set knotenAst = Nothing

End Sub

Ожидаемый результат: Чтобы получить список всех exposeID.

Фактический результат: Я получаю дамп.

Снимок экрана: HTML с домашней страницы (тег выделен желтым цветом)

Кто-нибудь знает, как я могу это исправить?

Спасибо и наилучшим образом С уважением!

Обновление: добавлена ​​картинка из моего списка: Результат в Excel

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Вы должны иметь возможность использовать комбинацию класса и атрибута css селекторы

Dim nodeList As Object, i As Long

Set nodeList = browser.document.querySelectorAll(".result-list__listing[data-id]")

For i = 0 To nodeList.Length - 1 

    Debug.Print nodeList.item(i).getAttribute("data-id")

Next
0 голосов
/ 05 мая 2020

Я знаю, что это действительно, действительно примитивно, по сравнению с тем, что QHarr выдает здесь все время, но это может быть достаточно для начала.

Sub DumpData()

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True

URL = "https://www.immobilienscout24.de/Suche/de/niedersachsen/oldenburg-oldenburg/haus-kaufen?pagenumber=1"

'Wait for site to fully load
IE.Navigate2 URL
Do While IE.Busy = True
   DoEvents
Loop

RowCount = 2

With Sheets("Sheet1")
   .Cells.ClearContents
   For Each itm In IE.document.all
      If itm.ID Like "*result-*" Then
        .Range("B" & RowCount) = itm.ID
        RowCount = RowCount + 1
      End If
   Next itm
End With
End Sub

Результат:

enter image description here

...