HTML Quellcode wird unvollständig geladen

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von NscMike.

    HTML Quellcode wird unvollständig geladen

    Hallo,

    mein Programm downloaded die Quellcodes von Webseiten. Allerdings bei manchen Webseiten wird nicht der komplette Quellcode runter geladen. Ich brauche eine Funktion, die den kompletten Quellcode downloaded.

    Beispiel Url bei dem das passiert: docmorris.de/thema/zahngesundheit/zahnpasta/zahnpasta

    Meine Funktion zum Quellcode downloaden:

    VB.NET-Quellcode

    1. Function seitenleser(ByVal strurll As String) As String
    2. Dim MyWebSite As String
    3. Dim webClient As System.Net.WebClient = New System.Net.WebClient()
    4. On Error GoTo Handler
    5. MyWebSite = webClient.DownloadString(strurll)
    6. Return MyWebSite
    7. Handler:
    8. Select Case Err.Number
    9. Case 1
    10. MyWebSite = ""
    11. End Select
    12. End Function
    hast du schonmal daran gedacht das eine Seite die auf deinem screen angezeigt wird aus mehreren html documenten besteht das is der Fall bei z.b. einer Seite mit frames oder scripten die etwas erstellen sollen das aber nicht können weil dafür wider Dateien fehlen

    wenn du Websites richtig anzeigen wilst musst du wohl alle Daten rausfinden und downloaden

    MFG joscha999

    Samus Aran schrieb:

    Lass Goto weg und lern die Grundlagen.

    xeno schrieb:

    Schon mal was von

    Visual Basic Quellcode
    1
    2
    3
    Try
    Catch ex As Exception
    End Try

    gehört?


    Genau, das ist alles sehr Hilfreich !
    Solche Antworten lassen das Forum VB-Paradise in der Außenwirkung aufblühen.

    Das ist der Hauptgrund warum ich selten noch in Google suche. Da kommen eh nur Hunderte solcher Beiträge, bis man dann endlich mal einen findet den man auch brauchen kann.

    Selber nicht an Regeln halten, aber welche aufstellen wollen.

    Beitrag gemeldet.

    MfG
    Bernd
    Würdest du ihm auch erklären warum er Try Catch Ex verwenden soll. Dann währe der Beitrag Hilfreich und Sinnvoll gewesen.

    Anhand seiner Frage und seinem gezeigten Post kann man leicht erkennen das er noch nicht den Wissensstand hat.

    So ist es nur Unansehlich und Negative für die Außenwelt und für Einsteiger die das hier lesen.
    Und auf keinen Fall Hilfreich für einen Einsteiger.

    Vielleicht auch noch einen Hinweis, das solch eine Frage doch besser im Grundlagen Forum aufgehoben ist.

    Außerdem ist es eine Art der Höflichkeit nicht mit gegenfragen zu Antworten.

    MfG

    Bernd

    Moonlite89 schrieb:

    VB.NET-Quellcode

    1. Function seitenleser(ByVal strurll As String) As String
    2. Dim MyWebSite As String
    3. Dim webClient As System.Net.WebClient = New System.Net.WebClient()
    4. On Error GoTo Handler
    5. MyWebSite = webClient.DownloadString(strurll)
    6. Return MyWebSite
    7. Handler:
    8. Select Case Err.Number
    9. Case 1
    10. MyWebSite = ""
    11. End Select
    12. End Function

    Ach du heilige Scheiße, woher hast du denn den Code?

    Hilfreich wäre es, wenn du neben einer Beispielseite, die du downloaden willst, auch den Quelltext, der runtergelanden wird, posten würdest. Dann kann man nämlich mal überprüfen, wo etwas fehlt und warum es so sein könnte.

    Deine Funktion, nur in "schön", kann so aussehen:

    VB.NET-Quellcode

    1. Function GetHTML(ByVal WebsiteUrl As String) As String
    2. Dim webClient As System.Net.WebClient = New System.Net.WebClient()
    3. Try
    4. return webClient.DownloadString(WebsiteUrl)
    5. Catch ex As WebException
    6. MessageBox.Show("Ausnahme aufgetreten! Möglicherweise ist die Webseite " & WebsiteUrl & " nicht erreichbar oder nicht vergeben. Details:" + ex.Message)
    7. End Try
    8. End Function

    Diese Funktion funktionier übrigens zu 100%, ich habe sie in dieser Form auch schon benutzt.

    VB.NET-Quellcode

    1. Function GetHTML(ByVal WebsiteUrl As String) As String
    2. Dim webClient As System.Net.WebClient = New System.Net.WebClient()
    3. Try
    4. return webClient.DownloadString(WebsiteUrl)
    5. Catch ex As WebException
    6. MessageBox.Show("Ausnahme aufgetreten! Möglicherweise ist die Webseite " & WebsiteUrl & " nicht erreichbar oder nicht vergeben. Details:" + ex.Message)
    7. End Try
    8. End Function


    Im Prinzip gehts sogar noch kürzer:

    VB.NET-Quellcode

    1. Function GetHTML(ByVal WebsiteUrl As String) As String
    2. Try
    3. return (New System.Net.WebClient()).DownloadString(WebsiteUrl)
    4. Catch ex As WebException
    5. MessageBox.Show("Ausnahme aufgetreten! Möglicherweise ist die Webseite " & WebsiteUrl & " nicht erreichbar oder nicht vergeben. Details:" & ex.Message)
    6. End Try
    7. End Function

    picoflop schrieb:


    Im Prinzip gehts sogar noch kürzer:

    VB.NET-Quellcode

    1. Function GetHTML(ByVal WebsiteUrl As String) As String
    2. Try
    3. return (New System.Net.WebClient()).DownloadString(WebsiteUrl)
    4. Catch ex As WebException
    5. MessageBox.Show("Ausnahme aufgetreten! Möglicherweise ist die Webseite " & WebsiteUrl & " nicht erreichbar oder nicht vergeben. Details:" & ex.Message)
    6. End Try
    7. End Function

    Wir wollen ja nicht gleich mit der Tür ins Haus ;)
    nach dem Downloaden solltest du noch nachträglich den Quellcode Zeile für Zeile überprüfen lassn ob CSS-, image- etc Verweise vorhanden sind um danach diese Verweise mit String funktionen zu downloaden.
    zB.

    VB.NET-Quellcode

    1. if line(xy).tostring.contains("<link rel=" & Chr(34) & "stylesheet.....") then
    2. 'links zsmfügen und downloaden.

    wäre jetzt für css Verweise.
    kurz erklärt:
    vb.net "Grundkenntnisse" und Html-Kenntnisse sollten vorhanden sein.
    Hallo,

    danke für die vielen Antworten wow. Ich brauche den code aus der angehängten txt (HTMLWANT.txt)
    Link: docmorris.de/thema/zahngesundheit/zahnpasta/zahnpasta

    ich bekomme jedoch mit meiner Funktion nur einen bruchteil des quellcodes(HTMLGET.txt)

    Vielen dank schonmal bis jetzt für die ganze Unterstützung. Ja ich bin noch neu in dem Gebiet
    Dateien
    • HTMLGET.txt

      (29,58 kB, 197 mal heruntergeladen, zuletzt: )
    • HTMLWANT.txt

      (55,03 kB, 212 mal heruntergeladen, zuletzt: )

    Samus Aran schrieb:

    Manche Seiten laden durch AJAX noch Daten nach, oder fügen nachträglich noch Elemente im onload hinzu.Diese Elemente werden in der heruntergeladenen Datei nicht vorhanden sein.

    Samus hatte Dir hiermit die richtige Antwort gegeben, auch wenn die Antwort vor lauter 'machs-besser' Codevorschlägen untergegangen ist.

    Mit dem WebClient bekommst Du nur die 'Anfangsseite'/Skeleton heruntergeladen, danach lädt die Seite per Javascript mehrfach nach. Das wirst Du mit dem Webclient nicht nachstellen können.

    Alternativen:
    a) Webbrowser Control: ist Javascript fähig und lädt dqaher genauso nach. Problem bei solchen Seiten ist immer festzustellen wann die Seite komplett ist, da oft das DocumentCompleted Event mehrfach oder auch garnicht ausgelöst wird.

    b) Nachstellen der internen Aufrufe mit dem HTTP-Webrequest: erfordert aber eine sehr genaue Analyse der Seite mit Sniffer+Firebug, eher etwas für Fortgeschrittene.

    Für Zahnpasta-Reklame würde ich mir das nicht antun ;)
    Hier wäre das Webbrowser-Control angebrachter, denke ich, der Aufwand mit dem Webrequest lohnt sich nicht, wenn man "nur" den Quelltext haben will.
    Ruf im WB die Seite auf, warte zwischen 3 und 10 Sekunden und greif dir dann den DocumentText.
    wie oben schon gesagt must du den Quelltext durchsuchen lassen und die externen Dateien (andere html datein, .jsp datein, CSS Stylesheet Datein) runterladen alles in nen tmp Ordner packen und dann anzeigen lassen

    MFG joscha999

    PS es gibt gute regex tutorials Hir im Forum ;D