Titel von Webseiten auslesen / ausgeben

Hallo Leute,

ich habe folgendes Problem: Ich muss viele URLs (über 1000) durchgehen und mir den Inhalt des -Tags (also den Webseiten-Titel) notieren.

Ich habe versucht mir die Arbeit zu erleichtern, indem ich ein kleines JavaScript dafür schreibe. Dies ist mein Ansatz (zunächst nur für eine einzige Webseite, später als Schleife):

function titleTest() {
 var myWindow = window.open ("http://www.werweisswas.de", "myWindow", "width=400,height=400");
 var title = myWindow.document.title;
 document.write(title);
 myWindow.close();
}

Ich bekomme bei der Ausführung den Fehler: „Zugriff verweigert“ für folgende Zeile: var title = myWindow.document.title; Vermutlich liegt es daran, dass die zu prüfenden Seiten online stehen und JavaScript somit keine Zugriffserlaubnis auf den Quelltext hat…?!

Kann man das trotzdem irgendwie lösen? Bin für jede Hilfe dankbar.

Gruß,
0nyx

Hallo 0nyx!

ich habe folgendes Problem: Ich muss viele URLs (über 1000)
durchgehen und mir den Inhalt des -Tags (also den
Webseiten-Titel) notieren.

Ich habe versucht mir die Arbeit zu erleichtern, indem ich ein
kleines JavaScript dafür schreibe.

Obwohl ich ein ewiger JS-Newbie bin, meine ich aber folgendes dazu:

  • Wenn Du die 1000 URLs in ein Frameset mit „(*,100%)“ packst, kannst Du womöglich Zugriff auf den jeweiligen Title bekommen.

  • Ich stelle aber in Frage, ob es sinnvoll ist, den Title per JS auszulesen. (Bei VB/VBS hätte ich jetzt nix gesagt.) – Was willst Du denn damit anfangen? –

(Wenn du jetzt gesagt hättest: Ich will gerne die URL als Kommentar in die zu speichernde Seite schreiben, damit ich weiß, wo sich die Originalseite befindet…, ja dann würde ich da einen Sinn drin sehen.)

CU DannyFox64

Hallo,

  • Wenn Du die 1000 URLs in ein Frameset mit „(*,100%)“ packst,
    kannst Du womöglich Zugriff auf den jeweiligen Title
    bekommen.

Habe ich schon probiert. Ergibt den selben Fehler, wie bei meinem Ansatz: „Zugriff verweigert“

  • Ich stelle aber in Frage, ob es sinnvoll ist, den Title per
    JS auszulesen. (Bei VB/VBS hätte ich jetzt nix gesagt.)

Ja,… das Problem ist nur, dass ich noch nie VB/VBS programmiert habe. Wenn du mir da allerdings etwas passendes hättest, wäre das super. (Es spielt keine Rolle wie ich an die Titel komme, JS war halt mein Ansatz.)

– Was willst Du denn damit anfangen? –

Das ganze dient zur Plannung eines Projekts. Da kann man bestimmte Webseiten anhand ihrer Titel (die haben eine bestimmte Form) von anderen unterscheiden.

Gruß,
0nyx

Hallo,

ich habe folgendes Problem: Ich muss viele URLs (über 1000)
durchgehen und mir den Inhalt des -Tags (also den
Webseiten-Titel) notieren.

Ich habe versucht mir die Arbeit zu erleichtern, indem ich ein
kleines JavaScript dafür schreibe. Dies ist mein Ansatz
(zunächst nur für eine einzige Webseite, später als Schleife):

function titleTest() {

Kann man das trotzdem irgendwie lösen? Bin für jede Hilfe
dankbar.

Hast Du perl zur Verfügung? Da ist es relativ
einfach, nehmen wir an, Du hast die Liste
der www-Adressen in einer Datei: ‚wwwliste.txt‘
und diese sähe so aus:http://www.spiegel.de
http://www.focus.de
http://www.gmx.de
http://www.wer-weiss-was.deJetzt könnte man mit einem kleinen
Skript (gettitle.pl): use LWP::Simple;

while(chomp( my $www = )) {
printf „%-30s title: %s [%s]\n“, $www,
get($www) =~ /\s*(.+?)\s*/i,
head($www)->server
}welches man wie folgt verwendet:

$> perl gettitle.pl wwwliste.txt

um alle Informationen herausziehen. Das Ergebnis wäre
im obigen Falle: http://www.spiegel.de title: SPIEGEL ONLINE - Nachrichten [Apache/1.3.26 (Unix) mod_fastcgi/2.2.12]
http://www.focus.de title: FOCUS Online Homepage [Apache]
http://www.gmx.de title: GMX [Apache-Coyote/1.1]
http://www.wer-weiss-was.de title: wer-weiss-was - Experten-Netzwerk zum Austausch … keit [Apache]

Grüße

CMБ

Hallo Onyx,

sobald man die Domaingrenze überschreitet bringt JS den Fehler „Zugriff verweigert“. Das gehört zum Sicherheitskonzept von JS.

Daher wird das wohl nichts mit JS, wenn Du nicht noch in die Java-Trickkiste greifst, aber da habe ich zu wenig Ahnung, um was zu verbreiten.

Gruß
Volkmar

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Volkmar,

so was in der Art hatte ich vermutet… na ja, jetzt weiß ich wenigstens, dass ich nicht länger mit JS rumprobieren brauche.

Danke und Gruß,
0nyx

Hallo Onyx,

sobald man die Domaingrenze überschreitet bringt JS den Fehler
„Zugriff verweigert“. Das gehört zum Sicherheitskonzept von
JS.

Daher wird das wohl nichts mit JS, wenn Du nicht noch in die
Java-Trickkiste greifst, aber da habe ich zu wenig Ahnung, um
was zu verbreiten.

Gruß
Volkmar

Hallo Semjon,

ich habe leider noch nie mit Perl gearbeitet. Ich habe lokal das XAMPP-Paket installiert, dass Perl beinhaltet - kann ich damit das Skript von dir ausführen? Wenn ja, wo muss ich folgende Zeile eingeben:

$> perl gettitle.pl wwwliste.txt

Kann ich das Perl-Skript auch im Browser aufrufen und wenn ja, wie gebe ich da die Liste (wwwliste.txt) mit?

Gruß,
0nyx

Hallo 0nyx,

ich habe leider noch nie mit Perl gearbeitet. Ich habe lokal
das XAMPP-Paket installiert, dass Perl beinhaltet - kann ich
damit das Skript von dir ausführen? Wenn ja, wo muss ich
folgende Zeile eingeben:

$> perl gettitle.pl wwwliste.txt

Kann ich das Perl-Skript auch im Browser aufrufen und wenn ja,
wie gebe ich da die Liste (wwwliste.txt) mit?

Wenn Du XAMPP mit Perl hast, dann hast Du auch ein
Verzeichnis … \XAMPP\modperl

Dorthinein packst Du das Skript (s.u.), die
Listen mit den Links legst Du in die htdocs-Wurzel,
z.B. nach c:\XAMPP\htdocs

Jetzt rufst Du einfach über den Brauser und über Dein
modperl auf: http://localhost.bei.mir/modperl/gettitle.pl?fname=l…., wir geben dem Skript den jeweiligen Namen über einen
Parameter ‚fname‘ mit.

Das Skript sähe nach den erforderlichen Änderungen etwa
so aus:#!perl

use strict;
use LWP::Simple;
use CGI qw();
use CGI::Carp qw(fatalsToBrowser);

my $cgi = new CGI;
my $path = $ENV{DOCUMENT_ROOT};
my $fname = $path . ‚/‘ . $cgi->param(‚fname‘);
$| = 1;
print $cgi->header, $cgi->start_html(„Titel aus $fname“);

open my $fh, '\n",
„ServerTitleSoftware\n“;

while( my $www = ) {
chomp $www;
print „“.
„$www“ .
„@{[get($www) =~ /\s*(.+?)\s*/i]}“.
„“.head($www)->server."".
„\n“
}
print „“, $cgi->end_html;
close $fh;

Grüße

CMБ

Hallo 0Nyx!

– Was willst Du denn damit anfangen? –

Das ganze dient zur Plannung eines Projekts. Da kann man
bestimmte Webseiten anhand ihrer Titel (die haben eine
bestimmte Form) von anderen unterscheiden.

Mit dem Tipp von Semjon, die Sache mit Perl zu lösen, hast Du den allerbesten Ansatz.

Grüße & CU DannyFox64

Hallo!

Danke zunächst mal für deine Bemühungen mit dem Skript.

Also ich habe im xampp-Verzeichnis keinen „modperl“-Ordner. Ich habe aber einen „cgi-bin“ Ordner, als auch einen „perl“ Ordner. Im letzteren ist ein weiterer Ordner „bin“ und darin die datei „perl.exe“. Wie gasagt habe ich noch nie mit Perl gearbeitet, deshalb weiß ich jetzt auch nicht welcher Ordner in dem Zusammenhang was bedeutet…

Ich habe folgendes versucht: Ich habe die Liste, wie du gesagt hast, ins Root-Verzeichnis gelegt und das Skript in den cgi-bin Ordner und es mal so mit dem Aufruf im Browser probiert. Das ergab dann folgende Fehlermeldung: couldn’t create child process: 720002: gettitle.pl

Hast du noch irgendwelche Vorschläge / Ideen?

Gruß,
0nyx

Hallo 0nyx,

Also ich habe im xampp-Verzeichnis keinen
„modperl“-Ordner.

Den bekommst Du, wenn Du bei XAMPP das
Paket (Addon) Perl 5.8.8-2.2.3 (o.ä.,
passend zu Deinem installierten XAMPP)
installierst.

Ich habe aber einen „cgi-bin“ Ordner, als
auch einen „perl“ Ordner. Im letzteren ist ein weiterer Ordner
„bin“ und darin die datei „perl.exe“. Wie gasagt habe ich noch
nie mit Perl gearbeitet, deshalb weiß ich jetzt auch nicht
welcher Ordner in dem Zusammenhang was bedeutet…

cgi-bin geht auch, wenn ein Perl vorhanden ist. Allerdings
kann es sein, dass Du dem Skript mitteilen musst, wo es
dieses Perl findet.

Ich habe folgendes versucht: Ich habe die Liste, wie du gesagt
hast, ins Root-Verzeichnis gelegt und das Skript in den
cgi-bin Ordner und es mal so mit dem Aufruf im Browser
probiert. Das ergab dann folgende Fehlermeldung: couldn’t
create child process: 720002: gettitle.pl

Das ist klar, er findet das Perl nicht. Da kannst Du in
der ersten Zeile des Skripts statt #!perlden exakten Pfad zum perl.exe mit umgekehrten
Backslashes angeben, z.B.: #!c:/xampp/perl/bin/perl.exe

Hast du noch irgendwelche Vorschläge / Ideen?

Wenn Du weisst, wo das Perl liegt, kannst Du auch das
vorhergehende (kleinere) Skript direkt in der DOS-Shell
starten:
cd \temp
c:\xampp\perl\bin\perl.exe gettitle.pl linkliste.txt > ausgabe.txtErstmal schauen, ob es ohne > Ausgabe geht, wenn ja, dann auf
diese Weise die Resultate abspeichern.

Grüße

CMБ

Hallo Semjon,

ich habe es jetzt hinbekommen. Danke nochmal für deine Hilfe!

Gruß,
0nyx