Benutzer mit den meisten Antworten
Metatags einer fremden Internetseite auslesen

Frage
-
Hallo zusammen,
ich möchte wie bei http://www.webmaster-eye.de/metatags-auslesen.html Metatags (Title, Description und Keywords) einer fremden Seite auslesen. Ich programmiere in ASP.NET (Visual Basic). Habt Ihr Ideen wie ich dieses am einfachsten umsetze?
Vielen Dank im Voraus!
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
-
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
- Bearbeitet Robert BreitenhoferModerator Freitag, 22. Januar 2010 08:23 Code Formatierung
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 22. Januar 2010 08:24
Alle Antworten
-
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
-
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
-
WOW, Danke!
WebClient.DownloadString( ... ) ist ja super einfach und liefert auch Umlaute...
Jetzt muss ich nur noch irgendwie Title, Description und Keywords parsen?!? -
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
-
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
- Bearbeitet Robert BreitenhoferModerator Freitag, 22. Januar 2010 08:23 Code Formatierung
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 22. Januar 2010 08:24