Mehrere Daten aus Quelltext auslesen

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

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Mehrere Daten aus Quelltext auslesen

    Hallo Leute,

    ich habe ein kleines Problem. Ich bin gerade dabei, mir ein kleines Programm zu schreiben, welches zwei Daten aus einem HTML Quelltext raus suchen soll. Ich bin auch schon relativ weit gekommen, jedoch habe ich jetzt das Problem, dass er sowohl für den Wert1 als auch den Wert2 den selben Wert ausliest. Das Programm liest im Moment nur den ersten Wert aus und packt diesen ersten Wert auch zu Wert2. Kann mir da jemand evtl. weiterhelfen? Hier der Code, den ich bis jetzt habe:

    Programmiert mit Visual Studio 2010


    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.IO
    3. Public Class Form1
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. Label1.Text = "Wert1 " & Wertlesen("Price range: ", TextBox1.Text) & " €"
    6. Label2.Text = "Wert1 " & Wertlesen("Price range: ", TextBox1.Text) & " €"
    7. End Sub
    8. Public Function Wertlesen(ByVal Gesstring As String, ByVal URL As String) As Integer
    9. Dim hReq As HttpWebRequest
    10. Dim HRes As HttpWebResponse
    11. hReq = DirectCast(HttpWebRequest.Create("URL"), HttpWebRequest)
    12. HRes = DirectCast(hReq.GetResponse(), HttpWebResponse)
    13. Dim s As Stream = HRes.GetResponseStream()
    14. Dim sR As New StreamReader(s)
    15. Dim webpage As String = sR.ReadToEnd
    16. sR.Close()
    17. s.Close()
    18. sR = Nothing
    19. s = Nothing
    20. hReq = Nothing
    21. HRes = Nothing
    22. Dim Startpos As Integer = webpage.IndexOf(Gesstring)
    23. Dim Zwischenstring As String = webpage.Substring(Startpos, 40)
    24. Dim i As Integer = 0
    25. Wertlesen = 0
    26. Do Until i = 39
    27. If IsNumeric(Zwischenstring(i)) = True Then
    28. If IsNumeric(Zwischenstring(i + 2)) = True Then
    29. Wertlesen = Convert.ToInt32(Zwischenstring(i) & Zwischenstring(i + 1) & Zwischenstring(i + 2))
    30. Exit Do
    31. Else
    32. Wertlesen = Convert.ToInt32(Zwischenstring(i) & Zwischenstring(i + 1))
    33. Exit Do
    34. End If
    35. End If
    36. i = i + 1
    37. Loop
    38. End Function
    39. End Class
    Ich nehme an, du willst den Preisbereich aus dem String ​'Based on 1 prices entered by 1 users / Price range: 169.00 EUR to 169.00 EUR'
    Du suchst zweimal das selbe, nämlich die Zahl hinter Price range:
    Zieh dir die ersten 50 Zeichen danach aus dem Text und Splitte den String, dann hast du im gesplitteten Array an Position 0 und 2 deine gesuchten Zahlen.

    Aber wie schon erwähnt wurde: Webscraping steht und fällt mit der Dynamik des Webseiten-Designer.
    Wenn sich die Seite ändert musst du den Code anpassen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    ErfinderDesRades schrieb:

    meinst du wirklich, der TE kann mit sonem hingeworfenen Stichwort was anfangen

    Wenn er sich dafür interessiert, wie er seine Probleme lösen bzw. Intentionen umsetzen kann, dann wird er sich wohl im Internet bzw. hier im Forum darüber schlau machen, das ist ja auch ganz wichtig für die Programmierung. Somit kann man dann auch Links finden, wie der von @Andy. Oft muss man das ja auch selbstständig, von daher war das imo schon richtig.
    Das sollte jetzt btw keine Unterstellung sein o. ä., nicht, dass das jemand falsch versteht, im Gegenteil, ich bin ziemlich optimistisch, dass der TE das machen würde, da ihm das ja hilft. ;)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Wieso OffTopic? Das ist ja durchaus wichtig. Gibt verschiedene Seiten, auf denen man Patterns gut testen kann, kann ich also auch nur empfehlen. Ich bin großer Fan von dem hier: regex101.com/
    Ich weiß nicht, inwiefern man hier ohne RegEx zurechtkäme, aber ich denke damit wäre es "am Einfachsten", also nicht die RegExp im direkten Sinne, die erscheinen einem erst etwas Overkill, aber damit wäre das eben alles gut und sauber zu bewerkstelligen. (Ist auch die normale Vorgehensweise)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: