Der Martin: Telefonbuch Rückwärtssuche

Beitrag lesen

Hallo,

bitte antworte nicht wahllos auf irgendeinen Beitrag im Thread, sondern auf den, auf den du dich gerade beziehst. Sonst entsteht ein Zusammenhang, der gar nicht beabsichtigt ist.

Sorry, bin neu hier und habe noch nicht durchschaut, wie sich das "ordnet". Kanns ein Admin richten und die richtige Reihenfolge einrichten?

nee, das ist jetzt so, wie's ist.

Stellt sich die Frage: Warum zapfst du dafür eine öffentliche Datenbank an? Eine Abfrage mit der Telefonnummer auf die Patienten-Datenbank würde doch genügen. Und dort wüsstest du wenigstens, dass alle nötigen Daten da sind - und in der Form, wie du sie brauchst.

Patienten-Datenbank genügt nicht. Es rufen auich "neue" Patienten an.

Dann wäre ich doch wieder vorsichtig, ob die gewerbliche Nutzung der Rückwärtssuche überhaupt zulässig ist.

Ich habe beim Ausprobieren leider keinen Eintrag mit Blumengrüßen gefunden

Probier mal 03643775947

Ein Eintrag in Weimar im div#entry_1. Der Name steckt im h2-Nachfahrenelement, die Adresse treffenderweise in einem address-Nachfahrenelement. Die Blumengrüße in einem weiteren div dahinter.

Gegenprobe mit der Nummer meines bevorzugten Pizza-Lieferdienstes im Nachbarort: Keine Blumengrüße, aber die Struktur ist genau dieselbe:

<div#entry_1>
  <div.oe_hit>
    <div.counter/>
    <h2>
      <a>Name</a>
    </h2>
    <address>Adresse</address>
    Sonstiger Müll: Blumengrüße, Bewertungen, Web-Link u.ä.
  </div>
</div>

Anscheinend ist dein Codeabschnitt, der das div#entry_1 weiter aufdröselt, das Problem. Da kann ich aber nicht mehr folgen, was diese Anweisungen wirklich tun.

Hab ich mir schon gedacht. Aber irgendwie sieht eingefügter Code nicht so richtig aus

Das liegt wohl daran, dass du entweder am Anfang oder am Ende nicht die ganze Zeile mitmarkiert hast, sondern nur einen Teil. Dann macht die Forensoftware ein Stück "Inline-Code" draus.

Imports System.Web
Imports System.Net
Imports System.Text
Imports HtmlAgilityPack

Public Class DasOertliche
    Private Tab As Char = Convert.ToChar(9)
    Private CrLf As String = Environment.NewLine
    Friend Property AnruferListe As List(Of String)

    Friend Function Anrufer(caller As String) As Boolean
        Dim liste = New List(Of String)
        Dim client As WebClient = New WebClient()
        Dim doc As HtmlDocument = New HtmlDocument()

        doc.Load(client.OpenRead("https://www.dasoertliche.de/?form_name=search_inv&buc=674&page=5&context=4&action=43&ph=" & caller), Encoding.UTF8)
        Dim i As Integer = 1

        Try
            While i < 10
                Dim entry = doc.GetElementbyId($"entry_{i}")
                If entry Is Nothing Then Exit While

                Dim divLeftOnHit = entry.ChildNodes.FirstOrDefault(Function(a) a.HasClass("oe_hit"))
                Dim _Name As String = HttpUtility.HtmlDecode(divLeftOnHit.ChildNodes.FirstOrDefault(Function(a) a.Name = "a").InnerText.Replace(CrLf, ""))
                Dim _Adresse As String = divLeftOnHit.ChildNodes.FirstOrDefault(Function(a) a.Name = "address").InnerText.Replace(CrLf, "").Replace(Tab, "")
                liste.Add(_Name & ";" & _Adresse.Replace("&nbsp", "").Replace(",", " "))
                i += 1
            End While
        Catch ex As Exception
            Dim dummy As String = ""
        End Try

        AnruferListe = liste
        Return liste.Count > 0
    End Function
End Class

Wie würdest Du es in HTML machen, um an die Werte für _Name und _Adresse zu kommen?

Gar nicht. HTML ist schließlich keine Programmiersprache, sondern eine Auszeichnungssprache. Aber in Javascript würde ich ganz ähnlich anstellen: Ich suche nach einem Element mit der ID "entry_1". Finde ich keins: Pech gehabt. Andernfalls hole ich mir dessen h2-Kindelement mit dem Namen, und das address-Kindelement mit der Adresse. Den Rest werfe ich weg.

Live long and pros healthy,
 Martin

--
Lasst uns ins Horn brechen und aufstoßen.