Quelltext korrekt und schnell auslesen

  • VB.NET

Es gibt 96 Antworten in diesem Thema. Der letzte Beitrag () ist von markus.obi.

    Quelltext korrekt und schnell auslesen

    Guten Tag,


    Ich würde gerne aus einem Quelltext der wie unten aufgebaut ist, alle rot gekenzeichneten sachen auslesen... am besten in ein dgv oder listview

    <tr><td class="normalText">12/18/2012</td><td class="normalText"> 16:13</td><td class="normalText"> 0:44</td><td class="normalText"></td><td class="normalText">&#52&#49&#52&#52&#53&#49&#53&#54&#53&#57&#55&#64&#112&#114&#111&#50&#46&#118&#111&#105&#112&#103&#97&#116&#101&#119&#97&#121&#46&#111&#114&#103</td><td class="normalText"><a href="index.htm?indexdial=1;type=d">&#48&#52&#49&#57&#50&#54&#51&#48&#48&#48</a><a href="adr.htm?nameadd=0415555555&outgoing=4155555555@pro2.voipgateway.org"><img src="img/edit.gif" width="19" height="12" border="0" alt="edit"></a><td class="form" align="center"><a href="index.htm?dialeddel=1"><img src="img/delete.gif" width="12" height="12" border="0" alt="delete"></a></td>
    </td></tr>
    <tr><td class="normalText">12/18/2012</td><td class="normalText"> 07:52</td><td class="normalText"> 5:43</td><td class="normalText"></td><td class="normalText">&#52&#49&#52&#52&#53&#49&#53&#54&#53&#57&#55&#64&#112&#114&#111&#50&#46&#118&#111&#105&#112&#103&#97&#116&#101&#119&#97&#121&#46&#111&#114&#103</td><td class="normalText"><a href="index.htm?indexdial=2;type=d">&#48&#56&#52&#56&#55&#49&#49&#55&#49&#49</a><a href="adr.htm?nameadd=555555555&outgoing=0444444444@pro2.voipgateway.org"><img src="img/edit.gif" width="19" height="12" border="0" alt="edit"></a><td class="form" align="center"><a href="index.htm?dialeddel=2"><img src="img/delete.gif" width="12" height="12" border="0" alt="delete"></a></td>
    </td></tr>
    <tr><td class="normalText">12/13/2012</td><td class="normalText"> 10:02</td><td class="normalText"> 0:33</td><td class="normalText"></td><td class="normalText">&#52&#49&#52&#52&#53&#49&#53&#54&#53&#57&#55&#64&#112&#114&#111&#50&#46&#118&#111&#105&#112&#103&#97&#116&#101&#119&#97&#121&#46&#111&#114&#103</td><td class="normalText"><a href="index.htm?indexdial=3;type=d">&#48&#55&#57&#52&#48&#53&#56&#50&#52&#48</a><a href="adr.htm?nameadd=55555555&outgoing=4144555555@pro2.voipgateway.org"><img src="img/edit.gif" width="19" height="12" border="0" alt="edit"></a><td class="form" align="center"><a href="index.htm?dialeddel=3"><img src="img/delete.gif" width="12" height="12" border="0" alt="delete"></a></td>
    </td></tr>


    Jedoch weis ich nicht wie ich das anstellen sollte

    Danke für eure Hilfe

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „schnibli“ ()

    Hi,
    Zuerst benutze mal einen Code-Tag.

    Zum Problem:
    Die meisten lösen so etwas mit Regex (Regular Expressions).
    [VB 2008] RegEx Tutorial - Blutige Anfänger und Fortgeschrittene

    Alternativ:
    olussier.net/2010/03/30/easily…html-documents-in-csharp/

    Lg
    /nicht getestet
    Mittag,

    VB.NET-Quellcode

    1. 'dein quelltext
    2. Dim new_quell As String
    3. new_quell = new_quell.Replace(System.Convert.ToChar(34), System.Convert.ToChar(39)Dim list3 As New List(Of String)
    4. Dim patt3 As String = "[code]<td>(?<group1>.*?)</td>
    "
    Dim str3 As String = new_quell
    For Each match3 As Match In Regex.Matches(str3, patt3)
    list3.Add(match3.Groups("group3").Value)'
    MessageBox.Show(match3.Groups("group3").Value)
    Next[/code]


    in der liste3 steht nun alles was zwichen <td> und </td steht, dann müsstest du schauen ob items in der liste dem Format entsprechen xx:xx und ob das aus zahlen besteht für die anderen Sachen die du rausholen willst.
    ggf. nochmal das obrige verwedenden

    MfG

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

    Hallo,

    Danke für deine Mühe...

    Aber ich komm nicht ganz klar.... hab das ganze mal so angepasst:

    VB.NET-Quellcode

    1. Dim new_quell As String
    2. new_quell = WebBrowser1.DocumentText
    3. new_quell = new_quell.Replace(System.Convert.ToChar(34), System.Convert.ToChar(39))
    4. Dim list3 As New List(Of String)
    5. Dim patt3 As String = "[code]<td>(?<group1>.*?)</td>
    "
    Dim str3 As String = new_quell
    For Each match3 As Match In Regex.Matches(str3, patt3)
    list3.Add(match3.Groups("group3").Value) '
    MessageBox.Show(match3.Groups("group3").Value)

    Next
    End Sub[/code]

    jedoch wird mir nichts angezeigt :(
    Das kann auch nicht funktionieren, weil [ code ] oder [ /code ] nicht im quellcode vorkommen. Statt group3 musst du natürlich group1 schreiben.
    Les dir mal das Tutorial aus Post #2 durch.

    Versuchs mal damit:

    VB.NET-Quellcode

    1. Dim quell As String = 'Quelltext
    2. quell = quell.Replace(vbNewLine, "")
    3. For Each match1 As Match In Regex.Matches(quell, "<tr>(?<group1>.*?)</tr>")
    4. Dim blub As New List(Of String)
    5. For Each match2 As Match In Regex.Matches(match1.Groups("group1").Value, "<td.*?>(?<group2>.*?)</td>")
    6. blub.Add(match2.Groups("group2").Value)
    7. Next
    8. Dim match3 As Match = Regex.Match(blub.Item(5), "nameadd=(?<nameadd>\d+)&outgoing=(?<outgoing>\d+)")
    9. Debug.WriteLine(match3.Groups("nameadd").Value)
    10. Debug.WriteLine(match3.Groups("outgoing").Value)
    11. Debug.WriteLine(blub.Item(0))
    12. Debug.WriteLine(blub.Item(1))
    13. Debug.WriteLine(blub.Item(2))
    14. Next
    Hallo, ich habe mich mal das in Post2 gelesen, jedoch komme ich nicht auf mein resultat.

    Momentan habe ich den fehler:

    VB.NET-Quellcode

    1. Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein.
    2. Parametername: index


    Und dies wird leider nicht erklärt... das heist soviel ich weis ist der Index nicht negativ etc... :s
    Der Fehler steht doch da! Du der Index ist außerhalb des Bereichs! Du versuchst auf ein Element zuzugreifen, das nicht existiert.
    In Visual Studio kannst du mit der Maus über die entsprechende Auflistung fahren und den Inhalt anschauen. (Während der Laufzeit im Debugmodus!)
    Dazu entweder Haltepunkt machen oder einfach dann wenn die Exception fliegt.

    Ohne deinen Quellcode zu wissen können wir dir nicht helfen...
    Hallo,

    Mein Code:

    VB.NET-Quellcode

    1. Dim quell As String = WebBrowser1.DocumentText
    2. quell = quell.Replace(vbNewLine, "")
    3. For Each match1 As Match In Regex.Matches(quell, "<tr>(?<group1>.*?)</tr>")
    4. Dim blub As New List(Of String)
    5. For Each match2 As Match In Regex.Matches(match1.Groups("group1").Value, "<td.*?>(?<group2>.*?)</td>")
    6. blub.Add(match2.Groups("group1").Value)
    7. Next
    8. Dim match3 As Match = Regex.Match(blub.Item(5), "nameadd=(?<nameadd>)&outgoing=(?<outgoing>)")
    9. Debug.WriteLine(match3.Groups("nameadd").Value)
    10. Debug.WriteLine(match3.Groups("outgoing").Value)
    11. Debug.WriteLine(blub.Item(0))
    12. Debug.WriteLine(blub.Item(1))
    13. Debug.WriteLine(blub.Item(2))
    14. Next





    Jedoch bin ich nicht so versiert mit fehlern, da ich diese gerne meide :)

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. WebBrowser1.Url = New Uri("http://192.168.61.41")
    5. End Sub
    6. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    7. Dim quell As String = WebBrowser1.DocumentText
    8. quell = quell.Replace(vbNewLine, "")
    9. For Each match1 As Match In Regex.Matches(quell, "<tr>(?<group1>.*?)</tr>")
    10. Dim blub As New List(Of String)
    11. For Each match2 As Match In Regex.Matches(match1.Groups("group1").Value, "<td.*?>(?<group2>.*?)</td>")
    12. blub.Add(match2.Groups("group2").Value)
    13. Next
    14. Dim match3 As Match = Regex.Match(blub.Item(5), "nameadd=(?<nameadd>\d+)&outgoing=(?<outgoing>\d+)")
    15. Debug.WriteLine(match3.Groups("nameadd").Value)
    16. Debug.WriteLine(match3.Groups("outgoing").Value)
    17. Debug.WriteLine(blub.Item(0))
    18. Debug.WriteLine(blub.Item(1))
    19. Debug.WriteLine(blub.Item(2))
    20. Next
    21. End Sub
    22. End Class


    Dies ist mein ganzer code, das einzige was ich geändert habe ist

    VB.NET-Quellcode

    1. WebBrowser1.Url = New Uri("http://192.168.61.41")

    und

    VB.NET-Quellcode

    1. Dim quell As String = WebBrowser1.DocumentText


    und es erscheint der selbe fehler.


    Daher habe ich angefange den code zu ändern...
    Hab es jetzt angepasst mit:

    VB.NET-Quellcode

    1. Dim client As New WebClient
    2. Dim quellcode As String = client.DownloadString("http://192.168.61.41")
    3. Dim quell As String = quellcode


    aber das ist ja nicht der Punkt warum es nicht funktioniert
    Post 5 von markus.obi

    VB.NET-Quellcode

    1. blub.Add(match2.Groups("group2").Value) ' Zeile 7
    2. Dim match3 As Match = Regex.Match(blub.Item(5), "nameadd=(?<nameadd>\d+)&outgoing=(?<outgoing>\d+)")'Zeile 9


    lass ich bei mir alles weg bis private Sub Button1.....
    Post 10 schnibli

    VB.NET-Quellcode

    1. blub.Add(match2.Groups("group2").Value)'Zeile 7
    2. Dim match3 As Match = Regex.Match(blub.Item(5), "nameadd=(?<nameadd>\d+)&outgoing=(?<outgoing>\d+)")'Zeile 9


    Ich hab ja in Post 10 geschrieben:

    Es erscheint der Selbe fehler, daher habe ich angefangen den Code zu ändern...
    Du hast geschrieben:

    VB.NET-Quellcode

    1. blub.Add(match2.Groups("group1").Value)
    2. Next
    3. Dim match3 As Match = Regex.Match(blub.Item(5), "nameadd=(?<nameadd>)&outgoing=(?<outgoing>)")


    was offensichtlich Müll ist und auch nicht das ist was ich in Post #5 geschrieben habe.
    Ja da hab ich was rausgelöscht aber nicht absichtlich, jedoch Funktioniert bei mir der Code von Post 5 bez. der hier nicht

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim client As New WebClient
    3. Dim quellcode As String = client.DownloadString("http://192.168.61.41")
    4. Dim quell As String = quellcode
    5. quell = quell.Replace(vbNewLine, "")
    6. For Each match1 As Match In Regex.Matches(quell, "<tr>(?<group1>.*?)</tr>")
    7. Dim blub As New List(Of String)
    8. For Each match2 As Match In Regex.Matches(match1.Groups("group1").Value, "<td.*?>(?<group2>.*?)</td>")
    9. blub.Add(match2.Groups("group2").Value)
    10. Next
    11. Dim match3 As Match = Regex.Match(blub.Item(5), "nameadd=(?<nameadd>\d+)&outgoing=(?<outgoing>\d+)")
    12. Debug.WriteLine(match3.Groups("nameadd").Value)
    13. Debug.WriteLine(match3.Groups("outgoing").Value)
    14. Debug.WriteLine(blub.Item(0))
    15. Debug.WriteLine(blub.Item(1))
    16. Debug.WriteLine(blub.Item(2))
    17. Next
    18. End Sub
    Bei mir funktioniert der Code mit dem Quelltext aus Post #1.
    Spoiler anzeigen
    <tr><td class="normalText">12/18/2012</td><td class="normalText"> 16:13</td><td class="normalText"> 0:44</td><td class="normalText"></td><td class="normalText">&#52&#49&#52&#52&#53&#49&#53&#54&#53&#57&#55&#64&#112&#114&#111&#50&#46&#118&#111&#105&#112&#103&#97&#116&#101&#119&#97&#121&#46&#111&#114&#103</td><td class="normalText"><a href="index.htm?indexdial=1;type=d">&#48&#52&#49&#57&#50&#54&#51&#48&#48&#48</a><a href="adr.htm?nameadd=0415555555&outgoing=4155555555@pro2.voipgateway.org"><img src="img/edit.gif" width="19" height="12" border="0" alt="edit"></a><td class="form" align="center"><a href="index.htm?dialeddel=1"><img src="img/delete.gif" width="12" height="12" border="0" alt="delete"></a></td>
    </td></tr>
    <tr><td class="normalText">12/18/2012</td><td class="normalText"> 07:52</td><td class="normalText"> 5:43</td><td class="normalText"></td><td class="normalText">&#52&#49&#52&#52&#53&#49&#53&#54&#53&#57&#55&#64&#112&#114&#111&#50&#46&#118&#111&#105&#112&#103&#97&#116&#101&#119&#97&#121&#46&#111&#114&#103</td><td class="normalText"><a href="index.htm?indexdial=2;type=d">&#48&#56&#52&#56&#55&#49&#49&#55&#49&#49</a><a href="adr.htm?nameadd=555555555&outgoing=0444444444@pro2.voipgateway.org"><img src="img/edit.gif" width="19" height="12" border="0" alt="edit"></a><td class="form" align="center"><a href="index.htm?dialeddel=2"><img src="img/delete.gif" width="12" height="12" border="0" alt="delete"></a></td>
    </td></tr>
    <tr><td class="normalText">12/13/2012</td><td class="normalText"> 10:02</td><td class="normalText"> 0:33</td><td class="normalText"></td><td class="normalText">&#52&#49&#52&#52&#53&#49&#53&#54&#53&#57&#55&#64&#112&#114&#111&#50&#46&#118&#111&#105&#112&#103&#97&#116&#101&#119&#97&#121&#46&#111&#114&#103</td><td class="normalText"><a href="index.htm?indexdial=3;type=d">&#48&#55&#57&#52&#48&#53&#56&#50&#52&#48</a><a href="adr.htm?nameadd=55555555&outgoing=4144555555@pro2.voipgateway.org"><img src="img/edit.gif" width="19" height="12" border="0" alt="edit"></a><td class="form" align="center"><a href="index.htm?dialeddel=3"><img src="img/delete.gif" width="12" height="12" border="0" alt="delete"></a></td>
    </td></tr>

    Insofern nicht mein Problem!

    VB.NET-Quellcode

    1. Dim Request As HttpWebRequest = CType(HttpWebRequest.Create("http://deine.web.seite"), HttpWebRequest)
    2. Dim Response As HttpWebResponse = CType(Request.GetResponse(), HttpWebResponse)
    3. Dim Reader As StreamReader = New StreamReader(Response.GetResponseStream)
    4. Dim Content As String = reader.ReadToEnd
    5. Dim Pattern As String = "\<td class=\""normalText\""\>(?<string>(.*?))\<\/td\>"
    6. Dim List As New List(Of String)
    7. For Each Match As Match In Regex.Matches(Content, Pattern)
    8. List.Add(Match.Groups("string").Value)
    9. 'MsgBox(Match.Groups("string").Value)
    10. Console.WriteLine(Match.Groups("string").Value)
    11. Next


    Da nimmst du die Elemente in der Liste raus, die du brauchst und wiederholst das ganze mit den anderen Patterns.
    Ist noch Anpassungswürdig.