Quellcode (Tables) Inhalt herausfiltern

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Cell.

    Quellcode (Tables) Inhalt herausfiltern

    Hallo ihr lieben,

    ich hoffe ihr seid alle gut ins neue Jahr gekommen.
    Ich habe mir gestern sowie heute den Kopf zerbrochen und das Internet bemüht und stehe trotzdem auf dem Schlauch.

    Mein Vorhaben:

    Eine Anwendung schreiben in VB.NET 2012 die wie folgt arbeitet:

    Textbox1 (URL-Feld) Inhalt nehmen und von dieser Seite den Quelltext herunterladen und in einer Datei speichern oder die Daten direkt aus der Richttextbox1 nehmen (Es geht bestimmt auch ohne Zwischenspeichern, bin aber erst mal dabei geblieben) - CHECK

    # An dieser Stelle könnte ich eigentlich auch schauen, ob ich nicht direkt nur Tabellen herunterlade, oder?

    Quellcode

    1. Private Function getHTML(ByVal Address As String) As String
    2. Dim rt As String = ""
    3. Dim wRequest As WebRequest
    4. Dim wResponse As WebResponse
    5. Dim SR As StreamReader
    6. wRequest = WebRequest.Create(URLBOX.Text)
    7. wResponse = wRequest.GetResponse
    8. SR = New StreamReader(wResponse.GetResponseStream)
    9. rt = SR.ReadToEnd
    10. SR.Close()
    11. Return rt
    12. End Function



    Die Quelldatei nach bestimmten Inhalten durchsucht und mir diese in Textboxen füllt. Der Quellcode des Abschnitts sieht wie folgt aus:

    Quellcode

    1. <table class="uk-table uk-table-hover">
    2. <tbody>
    3. <tr>
    4. <td class="uk-text-bold">Rahmen</td>
    5. <td>
    6. sportiver Aluminium-Rahmen mit innenverlegter Kabelf&uuml;hrung
    7. </td>
    8. </tr>
    9. <tr>
    10. <td class="uk-text-bold">Gabel</td>
    11. <td>
    12. starre Stahlgabel, gerade
    13. </td>
    14. </tr>
    15. </td>
    16. </tr>
    17. </tbody>
    18. </table>


    Die gewünschte Ausgabe wäre mir am liebsten:

    (Label) Rahmen: (Textbox1.Text=)sportiver Aluminium-Rahmen mit innenverlegter Kabelf&uuml;hrung
    (Label) Gabel: (Textbox2.Text=)starre Stahlgabel, gerade

    etc.

    Bedeutet: ich benötigte nur Produktbeschreibung zwischen den <td> </td>



    Wie erwähnt, habe ich viel Google bemüht und dachte erst an Regular Expressions. Da kam ich mit:

    Quellcode

    1. Dim findtext2 As String = "(?<= <td class=""uk-text-bold"">)(.*?)(?=</td>)"
    2. Dim myregex2 As String = RichTextBox1.Text
    3. Dim doregex2 As MatchCollection = Regex.Matches(myregex2, findtext2)
    4. Dim matches2 As String = ""
    5. For Each match2 As Match In doregex2
    6. matches2 = matches2 + match2.ToString + Environment.NewLine
    7. Next
    8. MsgBox(matches2) 'Results



    soweit, dass ich die im Anhang befindliche Ausgabe erhalte. Also zu 50% richtig, wenn mann so will. Wenn ich es schaffen kann, einfach in gleicher Weise die anderen Informationen aus der Tabelle zu ziehen, wäre ich schon zufrieden.




    Weitere Google-Recherche hat mir diesen Code rausgespuckt:

    Daten aus HTML-Tabelle auslesen.

    Die Codeschnipsel sehen sehr vielversprechend aus, nur leider habe ich grade keine Ahnung wie ich mit den Returns, insofern es welche gibt, weiter arbeiten kann. Warscheinlich bin ich einfach nur noch blind.


    Ich würde mich freuen, wenn mir jemand helfen könnte.



    Edit:

    Ich konnte den Code jetzt verkleinern und aufs nötigste reduzieren:

    Quellcode

    1. im pos1 As Long
    2. Dim Pos2 As Long
    3. Dim Result As String
    4. Dim request As WebRequest = WebRequest.Create(URLBOX.Text) 'URL Abrufen aus Textbox'
    5. Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
    6. Dim Datastream As Stream = response.GetResponseStream
    7. Dim Reader As New StreamReader(Datastream)
    8. Dim strData As String = Reader.ReadToEnd
    9. 'Bereich der gelesen und in die RTB gepackt werden soll'
    10. pos1 = InStr(strData, "<table class=""uk-table uk-table-hover"">", vbTextCompare)
    11. Pos2 = InStr(pos1, strData, "</table>", vbTextCompare)
    12. Result = strData.Substring(pos1, Pos2 - pos1 + 7)
    13. RichTextBox1.Text = Result
    14. 'Link "Resize" um Produktnummer aus dem Link erhalten'
    15. Dim Link As String = Microsoft.VisualBasic.Left(URLBOX.Text, Len(URLBOX.Text) - 12)
    16. Dim Produktnummer As String = Microsoft.VisualBasic.Right(Link, 8)
    17. If URLBOX.Text.Trim.Length > 0 Then
    18. Using StrWriter As New IO.StreamWriter(Produktnummer & ".txt")
    19. StrWriter.WriteLine(RichTextBox1.Text)
    20. End Using
    21. End If
    22. 'HTML TAGS entfernen'
    23. Dim html = System.IO.File.ReadAllText(Produktnummer & ".txt")
    24. Dim tagless As String = StripTags(html)
    25. RichTextBox1.Text = tagless



    Jetzt habe ich reinen Plaintext den ich filtern muss. Ich hoffe, das macht mehr Sinn. :D
    Bilder
    • Unbenannt.PNG

      5,95 kB, 172×315, 242 mal angesehen

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

    Sorry ich verstehe gerade nicht wo dein Problem Liegt..

    Allem Anschein nach hast du es doch bereits gelöst oder habe ich das Falsch verstanden?

    Davon abgesehen kommt mir dein Weg etwas kompliziert vor...
    Ich hätte es ungefähr so gelöst:

    VB.NET-Quellcode

    1. Private Function RemoveHTML(ByVal Text As String) As String
    2. Return System.Text.RegularExpressions.Regex.Replace(Text, "<.*?>", "")
    3. End Function
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim wc As New WebClient
    6. Dim source As String = ""
    7. source = wc.DownloadString(TextBox1.Text)
    8. source = RemoveHTML(source)
    9. RichTextBox1.Text = source
    10. End Sub