Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: datekk am November 07, 2016, 15:00:47

Titel: Go Yellow Anfrage
Beitrag von: datekk am November 07, 2016, 15:00:47
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
Titel: Re: Go Yellow Anfrage
Beitrag von: crystal am November 08, 2016, 15:56:04
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.
Titel: Re: Go Yellow Anfrage
Beitrag von: datekk am November 09, 2016, 15:46:22
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.
Titel: Re: Go Yellow Anfrage
Beitrag von: DF6GL am November 09, 2016, 15:50:52
Hallo,


schau mal hier:

http://dbwiki.net/wiki/Datei:AccSampleAktienkurse.zip

könnte hilfreich sein.
Titel: Re: Go Yellow Anfrage
Beitrag von: crystal am November 09, 2016, 16:28:00
@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

Titel: Re: Go Yellow Anfrage
Beitrag von: datekk am November 10, 2016, 08:42:38
Dann vielen lieben Dank. Ich schau mal was ich draus bauen kann :)