Kleinanzeigen Suche
22. März 2011
Das Beispiel zeigt, wie man mit VBA auf Webseiten - in diesem Fall auf Kleinanzeigenportale - zugreifen kann und die Inhalte der Webseite auswertet.
Zunächst muss der Verweis (im VBE unter Extras - Verweise auf die Microsoft HTML Object Library gesetzt werden. Dann ist es möglich ein neues Objekt vom Typ MSHTML.HTMLDocument anzulegen. Dieses Objekt kennt die Methode "createDocumentFromUrl", der man im Wesentlichen die URL der Webseite übergibt.
Bei den meisten Portalen ist es möglich, die Suche nach Kleinanzeigen über eine URL und der Angabe des Suchbegriffs zu starten. Findix.com hat das sehr einfach gelöst und bietet die URL http://www.findix.com/suche/ an, die direkt mit dem Suchbegriff verknüpft werden kann d.h. z.B. http://www.findix.com/suche/fahrrad. Bei Quoka ist die Syntax etwas komplizierter (Übergabe des Arguments "Search1" an die cfm Funktion), aber der Suchbegriff kann auch hier einfach hinten an die URL angehängt werden.
Der Aufruf von "createDocumentFromUrl" liefert ein Objekt zurück, dass wesentliche Informationen zur Webseite enthält. Am Einfachsten kann man sich die Struktur und die Details des Objekts im Lokalfenster im Debug-Mode ansehen. In diesem Codebeispiel wird im Element "Body" die innerText-Eigenschaft ausgelesen, die den Webseiten Inhalt enthält.
Anschließend kann beispielhaft in den Ergebnissen in myResults(k).BodyResult mit einer Schleife nach
weiteren Details gesucht werden.
-
Type SearchWebType
-
Website As String
-
HTMLSearchQuery As String
-
BodyResult As String
-
End Type
-
-
Sub Kleinanzeigen_Suche()
-
'Verweis notwendig: Microsoft HTML Object Library
-
'
-
'HTML Seiten abrufen und Seiteninhalt durchsuchen
-
'03-2011
-
'E.Bimczok http://profi-excel.de
-
'
-
'Liest beispielhaft die Webseiten der Kleinanzeigenportale
-
'Findix.com und Quoka.de ein
-
-
Dim objMSHTML As New MSHTML.HTMLDocument
-
Dim myHTMLDoc As New MSHTML.HTMLDocument
-
Dim myResults() As SearchWebType
-
Dim myWebsiteSearch As String
-
Dim subSearchString As String
-
Dim k As Long
-
Dim foundPos As Long
-
-
ReDim myResults(1 To 2)
-
-
myWebsiteSearch = "Fahrrad"
-
subSearchString = "BMX" 'nach Begriff in den Ergebnissen suchen
-
-
myResults(1).Website = "http://www.findix.com"
-
myResults(1).HTMLSearchQuery = "http://www.findix.com/suche/"
-
-
myResults(2).Website = "http://www.quoka.de"
-
myResults(2).HTMLSearchQuery = "http://www.quoka.de/searchresult.cfm?SEARCH1="
-
-
'alle definierten Webseiten abrufen
-
For k = LBound(myResults) To UBound(myResults)
-
-
'z.B. http://www.findix.com/suche/fahrrad
-
Set myHTMLDoc = objMSHTML.createDocumentFromUrl( _
-
myResults(k).HTMLSearchQuery & myWebsiteSearch, _
-
vbNullString)
-
-
'Abwarten, bis die Seite geladen ist
-
While myHTMLDoc.readyState <> "complete"
-
DoEvents
-
Wend
-
-
myResults(k).BodyResult = myHTMLDoc.body.innerText
-
-
Next k
-
-
'detaillierte Suche
-
For k = LBound(myResults) To UBound(myResults)
-
foundPos = InStr(1, myResults(k).BodyResult, subSearchString, vbTextCompare)
-
If foundPos> 0 Then
-
'wenn Begriff gefunden wurde, 20 Zeichen davor
-
'und 200 Zeichen danach anzeigen
-
MsgBox ("Webseite: " & myResults(k).Website & vbCr & _
-
Mid(myResults(k).BodyResult, foundPos - 20, 200))
-
End If
-
Next k
-
-
End Sub
Abgelegt unter VBA Makros | Keine Kommentare »