Hilfe bei ablesen von Html Tabellen Text mit RegEx? oder einfach per Webrowser?

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Andrejd1987.

    Hilfe bei ablesen von Html Tabellen Text mit RegEx? oder einfach per Webrowser?

    Okay hi ich denke mal RegEx wurde schon oft betitelt nur habe ich mein Lösung noch nicht gefunden oder bzw. ein beispiel

    also ich möchte von einer Website aus,Text ablesen/auslesen von einer Tabelle.
    ich brauche da einBeispiel wie ich mit so einer Tabelle umgehen müsste.
    ich möchte die nur die markierten ablesen/auslesen
    und halt jedes einzeln, deswegen reicht mir ein beispiel wie ich eins davon ablesen8auslen könnte.
    Spoiler anzeigen

    HTML-Quellcode

    1. <table class="module_content" id="id_modemTable" style="table-layout:fixed" cellpadding="0" cellspacing="0">
    2. <tbody><tr><td class="title_row" style="text-align: center;" colspan="4"><span class="text_bold">Wireless-Status</span></td></tr>
    3. <tr><td style="padding-left: 3px;"><div class="text_bold">1</div></td><td><div class="text_bold">PLMN (öffentliches Mobilnetz):</div></td><td><div class="text_bold">26201</div></td></tr>
    4. <tr><td style="padding-left: 3px;"><div class="text_bold">2</div></td><td><div class="text_bold">Dienststatus:</div></td><td><div class="text_bold">Gültige Dienste</div></td></tr>
    5. <tr><td style="padding-left: 3px;"><div class="text_bold">3</div></td><td><div class="text_bold">Bandbreite(kHz):</div></td><td><div class="text_bold">10000</div></td></tr>
    6. <tr><td style="padding-left: 3px;"><div class="text_bold">4</div></td><td><div class="text_bold">Zellen-ID:</div></td><td><div class="text_bold">403</div></td></tr>
    7. <tr><td style="padding-left: 3px;"><div class="text_bold">5</div></td><td><div class="text_bold">Signalstärke:</div></td><td><div class="text_bold">3</div></td></tr>
    8. <tr><td style="padding-left: 3px;"><div class="text_bold">6</div></td><td><div class="text_bold">RSRP(dBm):</div></td><td><div class="text_bold">-91</div></td></tr>
    9. <tr><td style="padding-left: 3px;"><div class="text_bold">7</div></td><td><div class="text_bold">RSRQ(dB):</div></td><td><div class="text_bold">-7</div></td></tr>
    10. <tr><td style="padding-left: 3px;"><div class="text_bold">8</div></td><td><div class="text_bold">Roaming:</div></td><td><div class="text_bold">NEIN</div></td></tr>
    11. </tbody></table>

    die table identifiziere ich mit der ID=id_modemTable
    z.b. so

    VB.NET-Quellcode

    1. WebBrowser1.Document.GetElementById("id_modemTable")

    aber so richtig weis ich das nicht ;)

    mfg Andrejd
    Hallo, ich würde es per RegEx machen, da du dazu keinen Webbrowser brauchst. (Edit: Und der Webbrowser ****** ist ;) ) Ich habe gestern eine Methode geschrieben, die eine Tabelle ausliest und in eine DataTable schreibt. Diese kannst du aber nicht in typisierten DataSets benutzen. Möchtest du die Tabelle nur auslesen und keine weitere Daten(bank)arbeit machen, ist es aber ok. Du müsstest die Methode nur oben etwas anpassen, damit sie auch nur für die eine Tabelle ausgelöst wird. Außerdem noch <td.*>, anstatt nur <td> schreiben, weil in den td-Tags ja noch Kram drin steht.

    ToDataTable(+1)

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Module DataParser
    3. ''' <summary>Konvertiert eine HTML-Tabelle in eine DataTable</summary>
    4. ''' <param name="input">Der HTML-Input</param>
    5. ''' <returns>DataTable</returns>
    6. ''' <remarks></remarks>
    7. Public Function ToDataTable(ByVal input As String) As DataTable
    8. If input.Length() > 0 Then : Else : Throw New Exception("Input is nothing.") : End If
    9. Dim temp As String = input
    10. temp = temp.Replace(Environment.NewLine, "")
    11. Dim output As New DataTable()
    12. Dim columns As New Regex("<tr>(.*?)<.tr>")
    13. Dim items As New Regex("<td>(?<item>(.*?))<.td>")
    14. Dim columMatches As MatchCollection = columns.Matches(temp)
    15. If columMatches.Count > 0 Then : Else : Throw New Exception("Data is incorrect.") : End If
    16. For Each m As Match In columMatches
    17. If m.ToString().Contains("<th>") Then
    18. Dim rows As New Regex("<th>(?<spalte>(.*?))<.th>")
    19. Dim row As MatchCollection = rows.Matches(m.ToString())
    20. If row.Count > 0 Then : Else : Throw New Exception("Can't find any columns.") : End If
    21. For Each s As Match In row
    22. output.Columns.Add(s.Groups("spalte").Value)
    23. Next
    24. Else
    25. Dim itemsRow As MatchCollection = items.Matches(m.ToString())
    26. If itemsRow.Count > 0 Then : Else : Throw New Exception("No DataRows could found") : End If
    27. Dim rowList As New List(Of String)
    28. For Each item As Match In itemsRow
    29. rowList.Add(item.Groups("item").Value)
    30. Next
    31. output.Rows.Add(rowList.ToArray())
    32. End If
    33. Next
    34. Return output
    35. End Function
    36. 'Aufruf: Dim d As DataTable = DataParser.ToDataTable("<table><tr><th>Spalte</th><th>Spalte2</th></tr><tr><td>Hallo</td><td>Hallo2</td></tr></table>")
    37. ' DataGridView1.DataSource = d
    38. End Module

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

    bei ReqEx muss man ja quasi den quelltext vorher laden, bei ist es so, die Website ist basiert ein wenig auf Java oder änliches und im quelltext sehe ich die tabelle nicht nur wenn ich die elemente per browser untersuche ;)

    mfg Andrejd
    okay ihr sagt ja immer eine webrowser lösung ist nicht immer das beste
    aber im diesen fall kann ich nur eine Lösung nehmen die halt ohne um den quelltext runterzuladen auskommt, sonder einfach die sachen abliest,

    gibt es es den keine Lösung mit z.b. den webrowser control ?

    mfg Andrejd