RegEx webseiten abfrage Fehlerbehebung

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von bigbase.

    RegEx webseiten abfrage Fehlerbehebung

    Moin ich habe eine Recht komplizierte Abfrage auf meinestadt.de hierbei werden abgefragt welche straßen in einer beliebigen stadt exestieren

    Mein script lief über 1 Jahr lang problemlos nun hat wohl meinestadt.de eine minimale änderung an der seite vorgenommen und ich finde nun den Fehler in meinm script nicht

    Eventuell könnte mir ja jemand behilflich sein


    VB.NET-Quellcode

    1. System.Threading.Thread.Sleep(500)
    2. Dim Stadt As String = Zufallsstadt
    3. Dim WebAdress As String = "http://www.meinestadt.de/" & Stadt & "/stadtplan/strassenverzeichnis"
    4. Dim myWebClient As Net.WebClient = New Net.WebClient()
    5. myWebClient.Encoding = System.Text.Encoding.UTF8
    6. myWebClient.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials
    7. ' HTML der Buchstaben
    8. Dim data As String = myWebClient.DownloadString(WebAdress)
    9. Dim Buchstaben As New List(Of String)
    10. Dim Strassennamen As New List(Of String)
    11. 'Alle vorhanden Buchstaben herausfiltern
    12. Dim re As Regex = New Regex("http:\/\/www.meinestadt\.de\/[^\/]*\/stadtplan\/strassenverzeichnis\/[^>]*>([^<]*)<\/a>", RegexOptions.Multiline)
    13. Dim mc As MatchCollection = re.Matches(data)
    14. For Each m As Match In mc
    15. Buchstaben.Add(m.Groups(1).Value.Trim)
    16. Next
    17. 'Zufälliger Buchstabe auswählen
    18. Dim rndx As Random = New Random
    19. Dim Buchstabe As String = Buchstaben(rndx.Next(Buchstaben.Count))
    20. ' HTML der Strassen
    21. data = myWebClient.DownloadString(WebAdress & "/" & Buchstabe)
    22. If Buchstaben.Count = 0 Then
    23. MsgBox("Adresse konnte nicht generiert werden, Bitte wiederholen")
    24. End If
    25. re = New Regex("http:\/\/www.meinestadt\.de\/[^\/]*\/stadtplan\/strasse\/[^>]*>([^<]*)<\/a>", RegexOptions.Multiline)
    26. mc = re.Matches(data)
    27. For Each m As Match In mc
    28. Strassennamen.Add(m.Groups(1).Value.Trim)



    Der fehler lautet
    System.ArgumentOutOfRangeException: "Der Index lag außerhalb des Bereichs. Er darf nicht negativ und kleiner als die Sammlung sein."

    und findet hier stadt

    VB.NET-Quellcode

    1. Dim Buchstabe As String = Buchstaben(rndx.Next(Buchstaben.Count))



    Über eine hilfe würde ich mich sehr freuen

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „bigbase“ ()

    Wenn Du einen Haltepunkt an der Stelle setzt, steht z.B. was in Buchstaben drin? Pack doch mal eine Zeile drüber den Wert von rndx.Next(Buchstaben.Count) in eine Variable und gib mal bitte für den selben Durchlauf jenen Variablenwert an. Also insgesamt:

    VB.NET-Quellcode

    1. Dim AktuellerBuchstabenindex = rndx.Next(Buchstaben.Count)
    2. Dim Buchstabe As String = Buchstaben(AktuellerBuchstabenindex)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Und erneut die Frage: Was steht dabei in Buchstaben drin?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Dass Dein BuchstabenINDEX, die zufällige Zahl, Null ist, ist mir klar. Aber es muss doch irgendeine Buchstabensuppe sich in Zeile#14-#16 ergeben. Und da das ein String ist, kann dies nicht 0 sein. Höchstens ein leerer Text.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Na schau mal einer guck. Dann dürfte klar sein, wo die Ursache des Fehlers zu suchen ist. Nämlich nicht bei der Auswahl eines Buchstaben aus der Buchstabensuppe (so wie der Eingangspost vermuten lässt), sondern beim Kochen jener Suppe, also wohl in den Zeilen#12-#16. Um mehr ging es mir (leider) nicht. Da sind dann die RegExperten gefragt - zu denen ich leider nicht gehöre.

    EDIT: Vielleicht liegt es ja auch einfach an Folgendem:
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @bigbase Ist doch ganz einfach, meinestadt.de hat ihrer Seite optionales https spendiert und dabei das explizite Protokoll in den Links entfernt. Du musst aus deinem Regex String das http: entfernen weil die Links jetzt nur noch so //www.meinestadt.de/hannover/stadtplan/strasse/XY vorliegen.
    Schau:



    Grüße
    Vainamo