Gezielten Text einer Website Auslesen und in eine Textbox schreiben.

  • VB.NET
  • .NET (FX) 4.0

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Mokki.

    Gezielten Text einer Website Auslesen und in eine Textbox schreiben.

    Hi ,
    Ich möchte kurz zuanfang sagen ich bin kein Programmierer ich versuche mir alles durch google und youtube selbst bei zu bringen bin aber nun an meine grenzen gestoßen

    Ich bastel gerade ein programm das bestimmte adressen überpfüfen muss ist auch nicht so wichtig.

    Mein problem ist


    Ich möchte von folgender seite

    meinestadt.de/allstedt/stadtplan/strassenverzeichnis


    Die straßennamen auslesen.

    Ich habe eine textbox in der ein Ort drin steht dieser ort Kann zur generierung des linkes führen um die webseite auf zu rufen also

    meinestadt.de/ TEXTBOX in dem der ort steht /stadtplan/strassenverzeichnis

    Mit einer Ranom funktion kann ich nun hinten die buchstaben a-z hinschreiben um starßen zu wählen aber auf der seite angekommen ist nun mein ziel das er eine der straßen zufällig auswählt und diese in eine textbox schreibt sollte keine straße vorhanden sein soll er ein anderen buchstaben hinter den link setzen und hieran scheitere ich völlig ich komme einfach kein bischen weiter.


    Vieleicht ist einer von euch so nett und kann mit helfen vielen dank schon mal im vorraus

    Edit im Quelltext der seite sind die einzelnen links zu allen straßen somit könnte man direkt per random eine dieser links auswählen

    Quellcode

    1. </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/b" > B </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/d" > D </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/e" > E </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/f" > F </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/g" > G </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/h" > H </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/i" > I </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/k" > K </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/l" > L </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/m" > M </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/n" > N </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/o" > O </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/p" > P </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/q" > Q </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/r" > R </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/s" > S </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/t" > T </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/v" > V </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/w" > W </a></li><li class="ms-citylist-alphabetic-item"><a href="http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis/z" >
    d

    Quellcode

    1. ​[code]​
    [/code]

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

    Ich bin mit RegEx und youtube nun soweit gekommen aber immer noch in einer sackgasse es passoert nix heul

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("http://www.meinestadt.de/allstedt/stadtplan/strassenverzeichnis")
    3. Dim response As System.Net.HttpWebResponse = request.GetResponse
    4. Dim sr As System.IO.StreamReader = New System.IO.StreamReader(response.GetResponseStream())
    5. Dim rssourcecide As String = sr.ReadToEnd
    6. Dim r As New System.Text.RegularExpressions.Regex("http://www.meinestadt.de/.*?/stadtplan/strasse/.*?>(.*?)</a>", RegexOptions.Singleline)
    7. Dim matches As MatchCollection = r.Matches(rssourcecide)
    8. For Each match As System.Text.RegularExpressions.Match In (matches)
    Du benutz regex Steuerzeichen.. die musst du escapen, außerdem würde ein .* über alles gehen also muss es so aussehen: http:\/\/www.meinestadt\.de\/[^\/]*\/stadtplan\/strasse\/[^>]*>([^<]*)<\/a>


    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Ok also Regex hat verschiede Steuerzeichen, wie z.b. *.[]() usw. und wenn du jetzt nach einem Steuerzeichen suchen willst (z.b. einer Klammer) dann musst du es mit einem \ escapen.
    * => \*
    . => \.
    Das Regex von mir macht jetzt folgendes:
    http:\/\/www\.meinestadt\.de\/[^\/]*\/stadtplan\/strasse\/[^>]*>([^<]*)<\/a>
    http: => suchst nach dem Text http:
    \/\/ => sind zwei escapte Slashes => sucht nach //
    www => sucht nach www
    \. => ist ein escapter Punkt => sucht nach .
    meinestadt => sucht nach dem Text meinestadt
    \. => ist ein escapter Punkt => sucht nach .
    \/ => ist ein escapter Slash => sucht nach /
    Jetzt kommen wir zum ersten interessanten Block:
    [^\/]*
    eckige Klammern bezeichnen immer eine Menge von Zeichen. Z.B. [0-9] => alle Zahlen von 0-9.
    Wenn man jetzt ein ^ vor die Zeichen macht schließt die Menge alle Zeichen ein die nicht die zu den Zeichen gehören die hinter dem ^ stehen. Also [^0] alles bis auf 0
    Und ein Stern wiederholt die Klammer 0 oder mehrere Male.
    Also [^\/]* => suchst nach allem bis auf ein /, 0 oder mehrere Male => sucht nach allem bis ein Slash kommt (weil er ja auf hört zu suchen wenn er auf einen Slash trifft)
    Dann wieder nen escapter Slash
    Dann die Suche nach dem Text stadtplan
    Escapter Slash
    Dann die Suche nach dem Text strasse
    Escapter Slash
    Wieder so ne komische Klammer. Diesmal sucht er nach allem bis auf ein >
    Dann die Suche nach dem Text >
    Dann kommen normale Klammer zum Einsatz. Damit bildest du eine Gruppe, die du später aus dem Match extrahieren kannst.
    Darin eine Klammer, die alles bis auf ein < matched
    Dann die Suche nach dem Text <
    ein escapter Slash
    und dann noch die Suche nach dem Text a>

    Hoffe das hilft es besser zu verstehen...

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Hallo @bigbase

    So wie ich dich verstanden habe willst du einen zufälligen Strassennamen einer bestimmten Stadt ausgeben.
    Ein Problem in deinem Code ist das auf der Seite "Strassenverzeichnis" keine Strassennamen sind.
    Ein Zweites könnte sein, dass die RegexOption nicht Multiline ist.

    Mein Vorgehen wäre die Buchstaben aus der Seite "Strassenverzeichnis" herausfiltern.
    Einen zufälligen Buchstaben davon auswählen.
    Die Strassennamen von der Seite mit dem Buchstaben herausfiltern.
    Einen zufälligen Strassennamen davon auswählen.

    Beispiel

    VB.NET-Quellcode

    1. Private Sub Button29_Click(sender As System.Object, e As System.EventArgs) Handles Button29.Click
    2. Dim Stadt As String = "allstedt"
    3. Dim WebAdress As String = "[url]http://www.meinestadt.de[/url]/" & 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 rnd As Random = New Random
    19. Dim Buchstabe As String = Buchstaben(rnd.Next(Buchstaben.Count))
    20. ' HTML der Strassen
    21. data = myWebClient.DownloadString(WebAdress & "/" & Buchstabe)
    22. re = New Regex("http:\/\/www.meinestadt\.de\/[^\/]*\/stadtplan\/strasse\/[^>]*>([^<]*)<\/a>", RegexOptions.Multiline)
    23. mc = re.Matches(data)
    24. For Each m As Match In mc
    25. Strassennamen.Add(m.Groups(1).Value.Trim)
    26. Next
    27. 'Zufälliger Strassennamen ausgeben
    28. MessageBox.Show(Strassennamen(rnd.Next(Strassennamen.Count)))
    29. End Sub

    HenryV schrieb:

    Hallo @bigbase

    So wie ich dich verstanden habe willst du einen zufälligen Strassennamen einer bestimmten Stadt ausgeben.
    Ein Problem in deinem Code ist das auf der Seite "Strassenverzeichnis" keine Strassennamen sind.
    Ein Zweites könnte sein, dass die RegexOption nicht Multiline ist.

    Mein Vorgehen wäre die Buchstaben aus der Seite "Strassenverzeichnis" herausfiltern.
    Einen zufälligen Buchstaben davon auswählen.
    Die Strassennamen von der Seite mit dem Buchstaben herausfiltern.
    Einen zufälligen Strassennamen davon auswählen.

    Beispiel

    VB.NET-Quellcode

    1. Private Sub Button29_Click(sender As System.Object, e As System.EventArgs) Handles Button29.Click
    2. Dim Stadt As String = "allstedt"
    3. Dim WebAdress As String = "[url]http://www.meinestadt.de[/url]/" & 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 rnd As Random = New Random
    19. Dim Buchstabe As String = Buchstaben(rnd.Next(Buchstaben.Count))
    20. ' HTML der Strassen
    21. data = myWebClient.DownloadString(WebAdress & "/" & Buchstabe)
    22. re = New Regex("http:\/\/www.meinestadt\.de\/[^\/]*\/stadtplan\/strasse\/[^>]*>([^<]*)<\/a>", RegexOptions.Multiline)
    23. mc = re.Matches(data)
    24. For Each m As Match In mc
    25. Strassennamen.Add(m.Groups(1).Value.Trim)
    26. Next
    27. 'Zufälliger Strassennamen ausgeben
    28. MessageBox.Show(Strassennamen(rnd.Next(Strassennamen.Count)))
    29. End Sub



    Hallo Danke erstmal das du dir diese zeit genommen hast das ist Total nett leider bekomme ich bei der ausführung dieses scripts den folgenden fehler


    Das angegebene Pfadformat wird nicht unterstützt.

    Bezogen auf

    VB.NET-Quellcode

    1. Dim data As String = myWebClient.DownloadString(WebAdress)



    Was habe ich vergessen?

    Edit habs gelöst




    Habe es Jetzt mal so erweitert fals das grade jemand mitverfolgt..

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button29_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim Stadtpfad As String = Environment.CurrentDirectory & "\Stadt.txt"
    4. Dim Zufallsstadt As String = Nothing
    5. Dim Zufallsstadtzeile As New Random
    6. Dim Allthelines() As String = IO.File.ReadAllLines(Stadtpfad)
    7. Dim Menge00 As Integer = Allthelines.Count
    8. Dim returnvalue1 As Integer = Zufallsstadtzeile.Next(0, Menge00)
    9. Zufallsstadt = Allthelines(returnvalue1)
    10. Dim Stadt As String = Zufallsstadt
    11. Dim WebAdress As String = "http://www.meinestadt.de/" & Stadt & "/stadtplan/strassenverzeichnis"
    12. Dim myWebClient As Net.WebClient = New Net.WebClient()
    13. myWebClient.Encoding = System.Text.Encoding.UTF8
    14. myWebClient.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials
    15. ' HTML der Buchstaben
    16. Dim data As String = myWebClient.DownloadString(WebAdress)
    17. Dim Buchstaben As New List(Of String)
    18. Dim Strassennamen As New List(Of String)
    19. 'Alle vorhanden Buchstaben herausfiltern
    20. Dim re As Regex = New Regex("http:\/\/www.meinestadt\.de\/[^\/]*\/stadtplan\/strassenverzeichnis\/[^>]*>([^<]*)<\/a>", RegexOptions.Multiline)
    21. Dim mc As MatchCollection = re.Matches(data)
    22. For Each m As Match In mc
    23. Buchstaben.Add(m.Groups(1).Value.Trim)
    24. Next
    25. 'Zufälliger Buchstabe auswählen
    26. Dim rnd As Random = New Random
    27. Dim Buchstabe As String = Buchstaben(rnd.Next(Buchstaben.Count))
    28. ' HTML der Strassen
    29. data = myWebClient.DownloadString(WebAdress & "/" & Buchstabe)
    30. re = New Regex("http:\/\/www.meinestadt\.de\/[^\/]*\/stadtplan\/strasse\/[^>]*>([^<]*)<\/a>", RegexOptions.Multiline)
    31. mc = re.Matches(data)
    32. For Each m As Match In mc
    33. Strassennamen.Add(m.Groups(1).Value.Trim)
    34. Next
    35. 'Zufälliger Strassennamen ausgeben
    36. TextBox1.text = (Strassennamen(rnd.Next(Strassennamen.Count)))
    37. End Sub
    38. End Class

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

    Ich habe Für die postleizahl jetzt einen weiteren ReEx aleine gschreiben Leider stehe ich vor einen neuen Problem und zwar das ich dieses zeichen mit replace nicht rausfiltern kann

    Spoiler anzeigen

    VB.NET-Quellcode

    1. "


    Der Ganze Code schaut so aus

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.Text.RegularExpressions
    3. Public Class Form1
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. Dim oClient As New WebClient
    6. Try
    7. TextBox2.Text = oClient.DownloadString("http://home.meinestadt.de/berghuelen")
    8. Catch ex As Exception
    9. End Try
    10. Dim matches As MatchCollection = Regex.Matches(TextBox2.Text, "/postleitzahlen(.*?)</a></dd><dt>")
    11. Dim stringlist As New List(Of String)
    12. For Each Match As System.Text.RegularExpressions.Match In matches
    13. stringlist.Add(Match.Value.Replace("/postleitzahlen", "").Replace("">", ""))
    14. Next
    15. For u = 0 To stringlist.Count - 1
    16. MsgBox(stringlist.Item(u).ToString)
    17. Next
    18. End Sub
    19. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    20. End Sub
    21. End Class




    Lösung gefunden Trtotzdem danke fals sich jemand schon die mühe machte auch wenn das ganze nicht mega hübsch ausschaut ich bin anfänger blutiger anfänger

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Imports System.Net
    2. Imports System.Text.RegularExpressions
    3. Public Class Form1
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. Dim oClient As New WebClient
    6. Try
    7. TextBox2.Text = oClient.DownloadString("http://home.meinestadt.de/berghuelen")
    8. Catch ex As Exception
    9. End Try
    10. Dim matches As MatchCollection = Regex.Matches(TextBox2.Text, "/postleitzahlen[^>]*>(.*?)</a></dd><dt>")
    11. Dim stringlist As New List(Of String)
    12. For Each Match As System.Text.RegularExpressions.Match In matches
    13. stringlist.Add(Match.Value.Replace("/postleitzahlen", "").Replace(">", "").Replace(Chr(34), "").Replace("</a</dd<dt", ""))
    14. Next
    15. For u = 0 To stringlist.Count - 1
    16. MsgBox(stringlist.Item(u).ToString)
    17. Next
    18. End Sub
    19. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    20. End Sub
    21. End Class

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

    Könnt ihr mir bitte nochmal helfen

    Ich bekomme es nicht das ergebniss aus zu lesen inm eine textbox label oder ähnlichen

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim HttpClient As New WebClient
    2. Dim URL As String = "www.websitenlink.de"
    3. Dim Source As String = HttpClient.DownloadString(URL)
    4. Dim RGX As New Regex("<tr class=""message"">(.*?)</tr>", RegexOptions.Multiline)
    5. Dim MT As Match = RGX.Match(Source)
    6. End Sub


    Pk hab die multiline lösung falsch umgesetzt habs jetzt trozdem danke

    VB.NET-Quellcode

    1. Dim oClient As New WebClient
    2. Try
    3. TextBox1.Text = oClient.DownloadString("http://website.de")
    4. Catch ex As Exception
    5. End Try
    6. Dim matches As MatchCollection = Regex.Matches(TextBox1.Text, "<td class=""text"">(.*?)</td>", RegexOptions.Multiline)
    7. Dim stringlist As New List(Of String)
    8. For Each Match As System.Text.RegularExpressions.Match In matches
    9. stringlist.Add(Match.Value)
    10. Next
    11. For u = 0 To stringlist.Count - 1
    12. MsgBox(stringlist.Item(u).ToString)
    13. Next

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

    Noch nen paar Tips:
    Bennen am besten deine Controlls sinnvoll. Also nicht Textbox1 sondern z.b. Textbox_Quellcode.
    Ich würde dem Benutzer immer eine Fehlermeldung anzeigen lass. Also bei der Try catch iwas mit Messagebox.Show("Fehler beim Herunterladen")
    Dann brauchst du kein .ToString() bei der Msgbox, da das Ganze ja schon ne List(Of String) ist.
    Und Msgbox ist alter VB6 Code, in VB.NET solltest du Messagebox.Show verwenden.

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread