Extrahieren von Informationen aus einen HTML Docoment (URI)

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von zn-gong.

    Extrahieren von Informationen aus einen HTML Docoment (URI)

    Hallo,

    es geht um Folgende seite:
    nimmbus.de/fahrplanbuch/plaene/213H-1.htm
    ich will dort den gesamten Fahrplahn extrahieren.

    Alles soll in zwei Listviews geladen werden

    Die Tabelle oben,

    und die Tabelle unten!


    Grüße:
    zn-gong
    Cool, das wollte ich noch nicht. Aber ich denke, dass das ein ganz spannendes Projekt wird, viel Glück!

    -> Was? Jetzt mal normal:
    Schön, dass du uns mitteilst, was du programmieren möchtest.

    -> Und? Was weiter? Sollen wir dir dabei helfen?
    Wenn du unsere Hilfe möchtest, empfehle ich dir, nicht auf Copy&Paste-Code aus zu sein. Denn den wirst du hier nur mit viel Glück von desillusionierten Mitgliedern unseres Boards erhalten. Also stehen deine Chancen darauf schlecht.
    Nehmen wir einmal an, du bist ein kompetentes Mitglied unseres Boards, so solltest du recht fix auf die Idee kommen, uns deine Ansätze zu zeigen oder wenigstens dein Anliegen klar zu definieren. Beides würde uns ungemein dabei helfen, letztendlich DIR zu helfen.

    Aber ich kann dir schon eines sagen: Hier wirst du wohl am besten RegEx nutzen können.

    MfG,
    X-Zat / Momo
    Also ich weiß dass es eine Klasse namens HTML Docoment giebt. Und ein Webbrowser auf visuable = False zu setzen und nach den ich die Daten habe mit Disposezu killen ist auch nicht so mein Ding.

    Ich denke an Regex aner was vileicht einfacher sein Dürfte, Xdocoment

    VB.NET-Quellcode

    1. Dim TargetSite as Xdcocoment = Xdcocment.Load("http://www.nimmbus.de/fahrplanbuch/plaene/213H-1.htm")


    Wo bei ist HTML wircklich XML, ich schätze dass man es mit Xdocoment in der System.XML Namespcae schon hinbekommen künte.
    Ich sehe mir gerade den Quelltext an um zu sehen wo ich den jetzt hin mus!

    zn-gong schrieb:

    es geht um Folgende seite:
    nimmbus.de/fahrplanbuch/plaene/213H-1.htm
    ich will dort den gesamten Fahrplahn extrahieren.

    Warum extrahieren? Lade ihn doch wie er ist in ein Webbrauser-Control.
    Eine bessere Präsentation wird dir mit eigenen Controls kaum gelingen.
    Dass kan ich ja machen, aber ich will die Seite in ein Listview Laden, und nicht in ein Webbrowser Controll!
    Worauf kommt es dir an?
    Willst du die Daten präsentieren? - dann lasses wies ist, besser isses nur sehr aufwändig hinzukriegen.

    Willst du die Daten verarbeiten? - Warum sprichst du dann von einem ListView? Wenn du die Daten verarbeiten möchtest, brauchst du Datenklassen - mit Controls hat das nix zu tun.

    Daten verarbeiten könnte etwa sein, den jeweils nächsten Bus auszugeben. Dafür brauchst du Datenklassen, etwa typisierte DataTables, die du durchlaufen kannst, und - plink! - das Ergebnis auf ein Label.
    Ein Listview brauchst du nicht.

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

    Ich würde dir empfehlen wie unten schon angesprochen das Webbrowser Control zu benutzen. Alternativ geht auch nen Web- request/response. Gibt auch noch mehrere Lösungsansätze.. hier mal einer.
    Um den HTML-Text via Webbrowser-Control auszulesen gehe so vor:

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. WebBrowser1.Navigate("http://www.nimmbus.de/fahrplanbuch/plaene/213H-1.htm")
    5. End Sub
    6. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    7. Dim html As String = WebBrowser1.DocumentText
    8. Dim pattern As String = "alt\=.P.\s\/><\/a>\s([^\.]+)[^\d]+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)"
    9. Dim M As MatchCollection = Regex.Matches(html, pattern)
    10. For Each p As Match In M
    11. For i As Integer = 0 To 13 Step 1
    12. RichTextBox1.Text &= p.Groups(i + 1).Value & " "
    13. Next
    14. RichTextBox1.Text &= vbCrLf
    15. Next
    16. End Sub
    17. End Class


    Für den Code benötigst du:
    1x RichTextBox
    1x Button
    1x Webbrowser


    Das ist zwar noch nicht ausgereift vom RegEx her. Bin nicht so der RegEx-Profi, weil der HTML-Quellcode auch ziemlich schlecht geschrieben ist... aber so ungefair sollte es dann aussehen. Natürlich solltest du es nicht in eine RichTextBox einlesen sondern dann in ein ListView!

    mfg
    ponch0

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „Ponch0“ ()

    Nicht ganz dass was ich suche, aber dancke sehr, den diesen Coode kann ich für andere Functionen (in meinen Queko WebBrowser) Verwenden, den da habe ich Richtextbox, und da habe ich auch den Rest!

    zn-gong schrieb:

    Nicht ganz dass was ich suche, aber dancke sehr, den diesen Coode kann ich für andere Functionen (in meinen Queko WebBrowser) Verwenden, den da habe ich Richtextbox, und da habe ich auch den Rest!


    Naja du müsstest lediglich das Pattern der RegEx Funktion abändern und noch spezieller an den HTML-Quellcode anpassen. Danach es in ein ListView laden sollte eigentlich kein Problem darstellen?

    VB.NET-Quellcode

    1. With ListView1.Items.Add(p.Groups(1).Value)
    2. .SubItems.Add(p.Groups(2).Value)
    3. .SubItems.Add(p.Groups(3).Value)
    4. .SubItems.Add(p.Groups(4).Value)
    5. .SubItems.Add(p.Groups(5).Value)
    6. .SubItems.Add(p.Groups(6).Value)
    7. '... usw
    8. End With
    Functioniert der Quelltext auch bei der von mir genanten seite??

    Und giebt es auch für dass WebRequest einige beispiele!!??

    zn-gong schrieb:

    Functioniert der Quelltext auch bei der von mir genanten seite??

    Und giebt es auch für dass WebRequest einige beispiele!!??


    Die Frage verstehe ich nicht. Ob der Quelltext auf der von dir genannten Seite funktioniert?!?! Der Satz ergibt für mich irgendwie keinen Sinn. Bitte drück dich klar aus.

    Webrequest Beispiele gibt es im Forum auch wie Sand am Meer. Vielleicht benutzt du mal die Google Suche.

    ponch0
    Und wie kann ich dass ganze jetzt ohne einen Webbrowser Machen??
    Na das wurde dir doch oben schon gesagt: Mit einem (HTTP-)WebRequest.
    Dieser liefert angeforderte Daten (in deinem Falle den Quelltext der Seite) zurück. Soweit ich weiß funktionieren Browser auch nicht anders: Request schicken, empfangene Daten analysieren und interpretieren.
    Also: Setz dich am besten mit diesen (HTTP-)WebRequests auseinander.

    MfG,
    X-Zat / Momo
    Ne Kein Bock, ich werde mal sehen ob es schon Fertige sachen in Netframework giebt und dann einfach die Klassen nutzen.

    PS: Die idehe mit den Datenklassen ist ne ganz gute, zusehen wan der nächste bus nach Billstedt kommt ist sehr vernünftig!