Hi. (Wie) ist es möglich, eine GoYellow (oder anderes Online-Telefonbuch) Anfrage mit einer Telefonnummer zu starten und das Suchergebnis in eine Access Tabelle einfließen zu lassen?
Lg
datekk
Hallo,
die Antwort lautet Ja.
Du brauchst in deinem Formular ein Webbrowser-Steuerelement (kannst du natürlich auch verstecken).
Dem übergibst du dann den Search-String.
Das wb-Element zeigt nun entweder eine Seite mit der gewünschten Info an oder eine Seite, auf der irgendwo steht "nicht gefunden".
Du musst also den HTML-Code der Seite analysieren. Das geht über wb.document.
Hier mal ein Stück Code dazu:
Option Explicit
Public WithEvents WB As WebBrowser
Public WithEvents HDoc As HTMLDocument
Private Sub btnProcess_Click()
'...
'get title
s1 = ATrim(HDoc.getElementsByTagName("h1").Item(0).innerText)
If s1 <> "" Then
Title = s1
Else
Title = "?"
End If
'get more
s1=""
s1 = LCase(ATrim(HDoc.getElementsByClassName("more").Item(0).innerText))
If s1 <> "" Then
...
Private Sub Form_Load()
Set WB = Wb1.Object
End Sub
Private Sub WB_DocumentComplete(ByVal pDisp As Object, URL As Variant)
If WB.ReadyState = READYSTATE_COMPLETE Then
Set HDoc = WB.Document
End If
End Sub
Private Sub btnSearch_Click()
WB.navigate "http://www.abcde.com/search?q=" & MyItem.Value
End Sub
Mit diesem Code habe ich's gemacht. Allerdings mit einem sichtbaren wb-Element und den Buttons "Search" und "Process". (Meine Funktion ATrim entfernt führende und hängende sowie doppelte Leerzeichen.)
Es war nicht einfach, das alles herauszufinden...
Vielleicht hilft es dir.
LG
crystal
PS: du brauchst den Verweis auf die MS HTML Object Library.
Besten Dank. Wie unterscheide ich aber z.B. Firmenname von Straße usw. Die Suchergebnisse sollen ja automatisch in eine Tabelle übernommen werden.. also ich möchte nach einer Telefonnummer suchen und das Ergebnis (eine Firmenadresse) soll dann nach Firmenname, Straße, PLZ usw. in eine Tabelle wandern. Das kann ich aus o.g. Code noch nicht lesen.
Hallo,
schau mal hier:
http://dbwiki.net/wiki/Datei:AccSampleAktienkurse.zip
könnte hilfreich sein.
@datekk
Hallo,
was in meinem Code-Fragment nicht sofort sichtbar ist, ist die Zuordnung der Webseiten-Texte zu Access-Feldnamen.
Die Zeile
Title = s1
macht genau das, "Title" ist ein Feld in der Access-Tabelle.
OK - mein Code-Fragment ist etwas unglücklich, es sollte vielmehr darauf hinweisen, das HDoc verschiedene Möglichkeiten bietet, auf Elemente der HTML-Seite zuzugreifen, z.B. getElementsByTagName oder getElementsByClassName.
Kernaussage ist also: du musst die HTML-Seite selbst interpretieren und nach den gewünschten Werten absuchen. Dazu musst du dir den Quellcode der HTML-Seite anschauen und geeignete Identifier finden, die deine gewünschten Daten identifizieren (TagName, ClassName etc.).
Das kann schwierig werden, je nach dem, wie der HTML-Seiten-Generator programmiert wurde. Manchmal haben "Werte" keinen Tag oder Bezeichner und stehen "einfach so" mitten im HTML-Text. Oft muss man einfach nach HTML-Texten suchen, die vor dem gewünschten Wert stehen (vereinfachtes Bsp.: "die Telefon-Nummer lautet:"<weitere HTML-Anweisungen wie TextGröße oder -Farbe>"030864322")
(Solche Programme bzw. Funktionen werden Scraper genannt.)
Der von DF6GL eingestellte Link ist dabei sicher sehr hilfreich.
lg
crystal
Dann vielen lieben Dank. Ich schau mal was ich draus bauen kann :)