Scannen von Webseiten Quelltext

  • VB.NET
  • .NET (FX) 4.0

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Scannen von Webseiten Quelltext

    Hallo Zusammen,

    Ich versuche gerade ein kleines Tool zu schreiben, welches mir hilft meine Inhalte schneller herunter zuladen.


    In der Textbox wird eine URL zu einer Performence angegeben z.B. smule.com/p/2416676_67639912
    In dem Quellcode dieser performence Seiten befindet sich immer eine URL die mit

    VB.NET-Quellcode

    1. http://s.smule.com/x8/
    beginnt und mit .m4a endet z.B. s.smule.com/x8/minipiano/perfo…13d-916a-7f2b29092b4d.m4a .

    Diese URL möchte ich jetzt aus dem Quelltext rausfiltern und in der 2ten Textbox reinschreiben. Hat jemand eine Idee wie ich das am besten umsetzen kann? Per Google finde ich nur Tutorials die einen Webbrowser benötigen und den gesammten Quelltext in einer RichTextBox ausgeben, so möchte ich das aber nicht lösen.

    Vielen dank für die Hilfe und Liebe Grüße,
    Marvin

    MarvinKleinMusic schrieb:

    Die Frage ist aber erstmal wie ich an den Quellcode komme, ohne einen Webbrowser.


    Dafür nimmst nen WebClient.
    Der hat die Funktion DownloadString, damit bekommst ganz einfach den Quelltext. Allerding könntest du bei Seiten mit viel JavaScript und dynamischem Code ein Problem bekommen.
    Deshalb kann ich dir nur empfehlen den Quelltext erstmal per DownloadString in ein Text File zu laden und dort zu suchen ob deine Stellen vorhanden sind welche du auslesen möchtest.

    Falls nicht musst du einen Client Header basteln, allerding nur Thema falls es nicht funktioniert.

    Falls deine .m4a Links im Quellcode stehen, kannst du diese ganz einfach via RegularExpression herauslesen und weiterverarbeiten.
    Alles klar! Den Sourcecode habe ich jetzt mit Webclient geladen und in einer RichTextBox ausgegeben hat wunderbar geklappt.

    Doch wie kann ich diesen Code jetzt nach meiner URL per RegEX durchsuchen die ich brauche?

    VB.NET-Quellcode

    1. http://s.smule.com/x8/ (GESUCHT: minipiano/performance/rendered/9f/72/88d0c19a-0504-413d-916a-7f2b29092b4d ).m4a


    Der Gesucht Teil ist der einzige Teil der pro performence immer anders ist.

    LG
    Hallo nochmal!

    Ich glaube ich stehe kurz vor der Lösung.

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Imports System.Net
    3. Public Class panel
    4. Private Web As New WebClient
    5. Private Sub DownloadSourceCode(url As String)
    6. If Web.IsBusy = False Then
    7. Using Web As New Net.WebClient
    8. Web.Proxy = Nothing
    9. Try
    10. Web.DownloadStringAsync(New Uri(url))
    11. AddHandler Web.DownloadStringCompleted, AddressOf DownloadSourceCode_DownloadCompleted
    12. Catch ex As Exception
    13. MessageBox.Show(ex.Message)
    14. End Try
    15. End Using
    16. End If
    17. End Sub
    18. Private Sub DownloadSourceCode_DownloadCompleted(sender As Object, e As System.Net.DownloadStringCompletedEventArgs)
    19. If e.Error IsNot Nothing Then
    20. MessageBox.Show(e.Error.Message)
    21. Else
    22. RichTextBox1.Text = e.Result()
    23. ' http://s.smule.com/x8/minipiano/performance/rendered/9f/72/88d0c19a-0504-413d-916a-7f2b29092b4d.m4a
    24. Dim re As New Regex("http://s.smule.com/x8/.*.m4a")
    25. Dim matches As MatchCollection = re.Matches(e.Result())
    26. For Each itemcode As Match In matches
    27. MessageBox.Show(itemcode.Value.ToString)
    28. Next
    29. audioURL.Text = re.ToString
    30. End If
    31. End Sub
    32. Private Sub btnURL_Click(sender As System.Object, e As System.EventArgs) Handles btnURL.Click
    33. DownloadSourceCode(enterURL.Text)
    34. End Sub
    35. End Class


    Resultat:



    Die URL in der ersten Zeile.

    jetzt möchte ich aber nur die erste URL in einer Variabel abspeichern. Ideen?

    Liebe Grüße

    MarvinKleinMusic schrieb:

    Dim re As New Regex("http://s.smule.com/x8/.*.m4a")


    VB.NET-Quellcode

    1. Dim re As New Regex("http://s.smule.com/x8/.(?<DeineGruppe>(.*)).m4a")
    2. ...
    3. For Each itemcode As Match In matches
    4. MessageBox.Show(itemcode.groups("DeineGruppe").Value)
    5. Next
    6. ...


    So sollte es funktionieren.
    Leider nein. Ich erhalte das selbe resultat nur das s.smule.com/x8/m fehlen.

    Ich möchte aber nur einmal die gesammte URL haben.

    LG
    Es Funktioniert zwar, ist aber sehr sehr langsam. Gibt es noch einen besseren Weg?

    Und kannst du mir erklären was genau du gemacht hast?

    LG

    MarvinKleinMusic schrieb:

    Es Funktioniert zwar, ist aber sehr sehr langsam. Gibt es noch einen besseren Weg?

    Und kannst du mir erklären was genau du gemacht hast?

    LG


    Beim WebClienten ist es manchmal immer so das wenn er das erste mal verwendet wird langsam ist, danach etwas schneller. Ansonsten könnte man noch mit Threads arbeiten.

    Wie ich das gemacht habe?
    Alsoo in dem ganz langen rausgefilterten Text gibt es mehrere komma stellen, die habe ich gesplittet. Und da direkt am ende des Links ein komma ist, ist es sehr leicht ihn zu splitten.
    So nach dem Splitten des textes blieb aber immer noch das zeichen " in der URL. Und das zeichen wird dann ersetzt in nichts. Und so habe ich den Link da raus bekommen.

    Sorry falls das nicht gut erklärt ist. Ist einer meiner schwächen :P