none
Metatags einer fremden Internetseite auslesen RRS feed

Antworten

  • Du musst generell auf das Encoding der Zielseite achten. Das Parsen machst du mit Regular Expressions, beispiele für selbige habe ich dir oben ja schon verlinkt. Wie du die in .NET anwendest, lässt sich eigentlich ziemlich schnell googlen.
    • Als Antwort markiert etlem Freitag, 22. Januar 2010 01:53
    Donnerstag, 21. Januar 2010 18:30
  • Vielen Dank!!!!

    Ich habe es wie folgt gelöst und freue mich jetzt auf mein Bett ;-)

    Imports System
    Imports System.IO
    Imports System.Net
    Imports System.Text
    
    Partial Class _Default
    
        Inherits System.Web.UI.Page
    
        Public Function HieroglypheToUmlaut(ByVal Zeichenfolge As String) As String
    
            Zeichenfolge = Replace(Zeichenfolge, "", Nothing)
    
            Zeichenfolge = Replace(Zeichenfolge, "", "")
    
            Zeichenfolge = Replace(Zeichenfolge, "", "")
    
            Zeichenfolge = Replace(Zeichenfolge, "", "")
    
            Zeichenfolge = Replace(Zeichenfolge, "", "")
    
            Zeichenfolge = Replace(Zeichenfolge, "", "")
    
            Zeichenfolge = Replace(Zeichenfolge, "", "")
    
            Dim umgewandelt As String = Replace(Zeichenfolge, "", "")
    
            Return umgewandelt
    
        End Function
    
        Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
    
            Dim client As WebClient = New WebClient()
    
            Dim reply As String = client.DownloadString("http://amazon.de")
    
            Dim TitleTag As String
    
            Dim DescriptionTag As String
    
            Dim KeywordsTag As String
    
            TitleTag = "no title"
    
            DescriptionTag = "no description"
    
            KeywordsTag = "no keywords"
    
            Dim r As Regex
    
            Dim m As Match
    
            'TitleTag
    
            r = New Regex("(?<=<title.*>)([\s\S]*)(?=</title>)", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
    
            m = r.Match(reply)
    
            While m.Success
    
                TitleTag = m.Value
    
                m = m.NextMatch()
    
            End While
    
            'KeywordsTag 
    
            r = New Regex("<meta[\s]+[^>]*?name[\s]?=[\s\""\']+(.*?)keywords[\s\""\']+content[\s]?=[\s\""\']+(.*?)[\""\']+.*?>", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
    
            m = r.Match(reply)
    
            If m.Success Then KeywordsTag = m.Groups(2).Value
    
            'DescriptionTag
    
            r = New Regex("<meta[\s]+[^>]*?name[\s]?=[\s\""\']+(.*?)description[\s\""\']+content[\s]?=[\s\""\']+(.*?)[\""\']+.*?>", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
    
            m = r.Match(reply)
    
            If m.Success Then DescriptionTag = m.Groups(2).Value
    
            Response.Write(HieroglypheToUmlaut(Server.HtmlDecode(TitleTag)) & "<br/>")
    
            Response.Write(HieroglypheToUmlaut(Server.HtmlDecode(DescriptionTag)) & "<br/>")
    
            Response.Write(HieroglypheToUmlaut(KeywordsTag))
    
        End Sub
    
    End Class
    Freitag, 22. Januar 2010 01:53

Alle Antworten

  • Hol dir mit einem WebRequest den HTML-Output der betreffenden Seite und parse ihn durch, am besten direkt mit Regular Expressions. Geeignete Expressions solltest du hier finden.
    Donnerstag, 21. Januar 2010 13:16
  • Danke Thomas,

    der HTML-Output stellt leider keine Umlaute und Sonderzeichen dar. Mit den Regular Expressions verstehe ich nicht ganz. Hast Du da ein konkretes Beispiel?
    Donnerstag, 21. Januar 2010 16:38
  • Hi,
    der HTML-Output stellt leider keine Umlaute und Sonderzeichen dar. Mit den Regular Expressions verstehe ich nicht ganz. Hast Du da ein konkretes Beispiel?

    poste doch bitte mal deinen Quelltext, mit dem Du den WebRequest durchführst.

    Im einfachsten Fall kannst Du WebClient.DownloadString( ... ) verwenden.

    Evtl. wäre das Html Agility Pack aber eher was für dich, das sollte eigentlich alles liefern, was Du haben willst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 21. Januar 2010 17:09
    Moderator
  •  

    Ich würde ungerne auf eine externe Resource zugreifen ( Html Agility Pack  ). Ich probiere mal:  WebClient.DownloadString( ... )


    Protected
    Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click

     

    ' Create a request for the URL.

     

    Dim request As WebRequest = WebRequest.Create("http://www.google.de")

     

    ' If required by the server, set the credentials.

    request.Credentials = CredentialCache.DefaultCredentials

     

    ' Get the response.

     

    Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)

     

    ' Display the status.

    Console.WriteLine(response.StatusDescription)

     

    ' Get the stream containing content returned by the server.

     

    Dim dataStream As Stream = response.GetResponseStream()

     

    ' Open the stream using a StreamReader for easy access.

     

    Dim reader As New StreamReader(dataStream)

     

    ' Read the content.

     

    Dim responseFromServer As String = reader.ReadToEnd()

     

    ' Display the content.

    MsgBox(responseFromServer)

     

    ' Cleanup the streams and the response.

    reader.Close()

    dataStream.Close()

    response.Close()

     

    End Sub

    Donnerstag, 21. Januar 2010 17:17
  • WOW, Danke!

     WebClient.DownloadString( ... ) ist ja super einfach und liefert auch Umlaute...

    Jetzt muss ich nur noch irgendwie Title, Description und Keywords parsen?!?
    Donnerstag, 21. Januar 2010 17:21
  • Du musst generell auf das Encoding der Zielseite achten. Das Parsen machst du mit Regular Expressions, beispiele für selbige habe ich dir oben ja schon verlinkt. Wie du die in .NET anwendest, lässt sich eigentlich ziemlich schnell googlen.
    • Als Antwort markiert etlem Freitag, 22. Januar 2010 01:53
    Donnerstag, 21. Januar 2010 18:30
  • Vielen Dank!!!!

    Ich habe es wie folgt gelöst und freue mich jetzt auf mein Bett ;-)

    Imports System
    Imports System.IO
    Imports System.Net
    Imports System.Text
    
    Partial Class _Default
    
        Inherits System.Web.UI.Page
    
        Public Function HieroglypheToUmlaut(ByVal Zeichenfolge As String) As String
    
            Zeichenfolge = Replace(Zeichenfolge, "", Nothing)
    
            Zeichenfolge = Replace(Zeichenfolge, "", "")
    
            Zeichenfolge = Replace(Zeichenfolge, "", "")
    
            Zeichenfolge = Replace(Zeichenfolge, "", "")
    
            Zeichenfolge = Replace(Zeichenfolge, "", "")
    
            Zeichenfolge = Replace(Zeichenfolge, "", "")
    
            Zeichenfolge = Replace(Zeichenfolge, "", "")
    
            Dim umgewandelt As String = Replace(Zeichenfolge, "", "")
    
            Return umgewandelt
    
        End Function
    
        Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
    
            Dim client As WebClient = New WebClient()
    
            Dim reply As String = client.DownloadString("http://amazon.de")
    
            Dim TitleTag As String
    
            Dim DescriptionTag As String
    
            Dim KeywordsTag As String
    
            TitleTag = "no title"
    
            DescriptionTag = "no description"
    
            KeywordsTag = "no keywords"
    
            Dim r As Regex
    
            Dim m As Match
    
            'TitleTag
    
            r = New Regex("(?<=<title.*>)([\s\S]*)(?=</title>)", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
    
            m = r.Match(reply)
    
            While m.Success
    
                TitleTag = m.Value
    
                m = m.NextMatch()
    
            End While
    
            'KeywordsTag 
    
            r = New Regex("<meta[\s]+[^>]*?name[\s]?=[\s\""\']+(.*?)keywords[\s\""\']+content[\s]?=[\s\""\']+(.*?)[\""\']+.*?>", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
    
            m = r.Match(reply)
    
            If m.Success Then KeywordsTag = m.Groups(2).Value
    
            'DescriptionTag
    
            r = New Regex("<meta[\s]+[^>]*?name[\s]?=[\s\""\']+(.*?)description[\s\""\']+content[\s]?=[\s\""\']+(.*?)[\""\']+.*?>", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
    
            m = r.Match(reply)
    
            If m.Success Then DescriptionTag = m.Groups(2).Value
    
            Response.Write(HieroglypheToUmlaut(Server.HtmlDecode(TitleTag)) & "<br/>")
    
            Response.Write(HieroglypheToUmlaut(Server.HtmlDecode(DescriptionTag)) & "<br/>")
    
            Response.Write(HieroglypheToUmlaut(KeywordsTag))
    
        End Sub
    
    End Class
    Freitag, 22. Januar 2010 01:53