Meta-Tags mit JS auslesen ?
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
anpassen
auslese
beispiel
code
einlesen
ergebnis
frage
gross klein schreibung
http
inhalt
jemand
liste
problem
reihenfolge
schau
statement
tag
umwandlung
url
zugreifen
-
Hallo
gibt es eine Möglichkeit um Meta-Tags (title, description, keywords)
von einer "fremden" Seite (anderer Server) per JS auszulesen ?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Per Js weniger, aber via Curl geht das 1a.
Schau dir mal das Tut an , da wird genau beschrieben wie du Teile einer Website Scrapen kannst
http://www.jacobward.co.uk/web-scraping-with-php-curl-part-1/
ist alles super beschrieben. -
hmmm, ok, mit curl kann ich den Inhalt (HTML-Code) einlesen,
(... dann ist das hier wohl eher was für's PHP Forum)
aber ich bekomme Probleme beim Meta-Tags extrahieren (mit regex-Pattern)
ich habe 3 mal preg_match() Anweisung
preg_match("@<title>(.*)</title>@iUs", $contents, $match1); preg_match("@<meta name=['|\"]description['|\"] content=['|\"](.*)['|\"]@iUs", $contents, $match2); preg_match("@<meta name=['|\"]keywords['|\"] content=['|\"](.*)['|\"]@iUs", $contents, $match3);
Das funktioniert aber nur, wenn die Meta-Tags wie in den Pattern aufgebaut sind ("Reighenfolge")
<meta name="description" content="bla bla bla" />
aber wenn andersrum, dann kein Ergebnis (wenn zuerst content= und dann name=)
<meta content="bla bla bla" name="description" />
auch wenn die "Reighenfolge" stimmt, finde ich das Ergebnis komisch
bei $match1 ist das Ergebnis iin zweiten Array-Elemet ... $match1[1]
und bei $match2 und $match3 sind die Ergebnisse jeweils im ersten Array Element [0]
warum ???
Die PHP-Funktion get_meta_tags() will auch nicht so richtig,
da bekomme ich oft eine Fehlermeldung:
failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden
also fällt get_meta_tags() auch aus ... zu oft 403
PS:
ich möchte deshalb JS, um die Meta-Tags ohne Browser-Reload einlesen zu können
ok, das ginge wohl mit CURL und einem Ajax-Request,
aber meine Regex-Pattern sind nicht gerade optimal, wenn die "Reihenfolge" stimmen muss :(
... jemand ne Idee, wie man das "Reihenfolge" Problem lösen könnte,
oder andere Vorschläge ?
-
Reihenfolge: Regex anpassen. Wie das geht erkläre ich jetzt nicht.
Anderer Vorschlag: DOM o.ä. nutzen, ist aber vermutlich die schlechtere Wahl.
EDIT: Nun doch noch Zeit gefunden...<?php $html = <<< ETX <html> <head> <title>Titel</title> <meta name="keywords" content="keyword word blah" /> <meta name="description" content="some text" /> </head> </title> ETX; $title = '|<title>(.*)</title>|iU'; $meta = '#<meta (name|content)=(["\'])(.*)\\2 (name|content)=(["\'])(.*)\\5\\s*/?>#iU'; preg_match_all($title, $html, $match_title); preg_match_all($meta, $html, $match_meta); print_r($match_title); print_r($match_meta);
Beitrag zuletzt geändert: 15.7.2013 22:34:29 von hackyourlife -
vielen Dank
... einfach mit "ODER" ... ist ja genial :)
für reine JS Lösung habe ich jetzt noch YQL entdeckt ... hier die YQL console
mit dem Statement klappt es soweit
select * from html where url="http://www.lima-city.de" and xpath="//head//title|//head/meta[@name='description']|//head//meta[@name='keywords']"
Auf das YQL Ergebnis kann man dann auch im JSON Format zugreifen, also auch per JS auslesen.
aber hier ist dann das Problem der Gross-/ Klein-Schreibung bei name=...
wenn jemand
in seinem HEAD drin hat,name="Description"
dann findet YQL diesen TAG nicht ...
gibt es bei YQL auch sowas wie einen Modifier i wie bei preg_match ??
(also Gross-/ Klein-Schreibung ist egal)
PS ... ahhhh, man könnte auch einfach alle <meta ... /> Tags auslesen, egal was drin steht
YQL Statement :
select * from html where url="http://www.lima-city.de" and xpath="//head//title|//head//meta"
und dann im Ergebnis "selber" danach suchen, was man will (keywords/description)
aber trotzdem die Frage, ob es in YQL sowas für "Gross-/ Klein-Schreibung ist egal" gibt ... ?
denn es kann in HTML ja auch der Tag selber in Großbuchstaben sein ... TITLE / META
-
Hallo,
Ja, du kannst den Inhalt von Meta-Tags mit Javascript auslesen.
Es gibt im HTML-Objektmodell ein sogenanntes HTML-Elementobjekt 'meta'.
Auf dieses Elementobjekt kann man mit Javascript zugreifen. Man bekommt
eine Art Liste (bzw. Tabelle) der Meta-Tags der betreffenden Seite zurück
und kann diese Liste dann nach speziellen Tags durchsuchen.
Schau dir mal das Beispiel an in:
http://de.selfhtml.org/javascript/objekte/anzeige/htmlelemente_meta.htm
Dort ist eine kleine Javascript function gelistet. Wenn du auf 'Anzeigebeispiel'
klickst, siehts du den Output dieses Programms. Ich weiß nicht, was du genau
machen willst, aber vielleicht hilft das Beispiel ja.
Viel Spaß.
Beitrag zuletzt geändert: 22.7.2013 14:08:36 von geldmacher -
Hallo, ich habe gleich eine ähnliche Frage. Wie müsste ich es machen, wenn ich auf die Meta-Tags auf der eigenen Seite zugreifen möchte (zwingend mit JS)?
-
Versuche mal diesen Beispielcode:
var metas = document.getElementsByTagName("meta"); for (var i=0; i<metas.length; i++) { var e = metas[i]; if (e.hasAttribute("name") && e.hasAttribute("content")) { var name = e.getAttribute("name"); var content = e.getAttribute("content"); console.log("Meta-Tag; Name: " + name + ", Inhalt: " + content); } }
Den kannst du dann noch anpassen, je nachdem was genau du auslesen möchtest. -
document.getElementsByTagName(xyz) liefert nur eine Nodelist.
Mehr Möglichkeiten bietet eine Umwandlung der Nodelist in ein Array.
<script> function checkMeta(){ var meta = document.getElementsByTagName('meta'), // Liefert nur eine Nodelist n=''; metas= [].slice.call(meta); // Umwandlung der Nodelist in ein Array metas.forEach(function(obj,i){ //beispielsweise: console.log(obj.outerHTML); // Ausgabe in der Konsole // oder String erzeugen für die Ausgabe in einer Messagebox n+=obj.outerHTML+'\n'; // oder....oder } ); alert(n); // Ausgabe in einer Messagebox; } window.onload = function() {checkMeta()}; // Aufruf der anonymen Funktion checkMeta() </script>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage