Hallo!
Ich suche nach einem Script, dass aus einer bzw. mehreren HTML-Dateien die reinen URL's aus den <a href... Tags extrahiert und untereinander in ein extra File schreibt. Beispiel:
http://bla.blub.de/bla.htm
http://sonnenschein.waere.schoen/sonne.html
Mit Grep und nem passenden Regulären Ausdruck komme ich leider nicht zum Ziel. Jemand sagte zu mir, dass hier Perl sehr geeignet sein soll, aber leider kann ich kein Perl ;(
TIA, mirror
Perl/Bash-Script zum URL greppen
Re: Perl/Bash-Script zum URL greppen
pipe folgendes in ein file:
---schnipp---
#!/usr/local/bin/perl -w
# Name the outputfile to something you'd like:
$Trefferliste = "out.datei";
# Sammle die dateinamen ein:
foreach $datei (@ARGV) {
open(FUN,"<$datei")||die "Can't open file $datei";
@text = <FUN> ;
close (FUN) ;
foreach $ergebnis ( @text ) {
$ergebnis =~ /\"(http:<!--no-->[\w\W]*)\"/ig;
open (GUN,">>$Trefferliste")||die "Can't write to $Trefferliste";
print GUN $1 . "
" if $1;
close GUN ||die "Couldn't close filehandle $Trefferliste";
}
}
exit;
---schnapp---
mach ein chmod +x darauf.
rufe es so auf :
filename.pl datei1 datei2 datei3 ...datein
have fun
ratte
---schnipp---
#!/usr/local/bin/perl -w
# Name the outputfile to something you'd like:
$Trefferliste = "out.datei";
# Sammle die dateinamen ein:
foreach $datei (@ARGV) {
open(FUN,"<$datei")||die "Can't open file $datei";
@text = <FUN> ;
close (FUN) ;
foreach $ergebnis ( @text ) {
$ergebnis =~ /\"(http:<!--no-->[\w\W]*)\"/ig;
open (GUN,">>$Trefferliste")||die "Can't write to $Trefferliste";
print GUN $1 . "
" if $1;
close GUN ||die "Couldn't close filehandle $Trefferliste";
}
}
exit;
---schnapp---
mach ein chmod +x darauf.
rufe es so auf :
filename.pl datei1 datei2 datei3 ...datein
have fun
ratte
Re: Perl/Bash-Script zum URL greppen
hi, beim quickhack und nicht gruendlich nachdenken kommt natuerlich nix bei raus.
das script ist buggie und funkt nur in sonderfaellen.
bei zeit poste ich hier n update, falls kein sed-zauberer vorbeikommt...
ratte
das script ist buggie und funkt nur in sonderfaellen.
bei zeit poste ich hier n update, falls kein sed-zauberer vorbeikommt...
ratte
Re: Perl/Bash-Script zum URL greppen
dies hier hat eine bessere regular expression und sortiert doppelte links aus.
---schnipp---
#!/usr/local/bin/perl -w
$Trefferliste = "out.datei";
#
# Einlesen der Html-Dateien
#
foreach $datei (@ARGV) {
open(FUN,"<$datei")||die "Can't open file $datei";
@text = <FUN> ;
push @htmltext, @text;
}
close (FUN) ;
#
# init $langezeile
#
$langezeile ="";
#
# Zeilenumbrueche loeschen, alle dateien bilden nun eine zeile
#
foreach $zeile (@htmltext) {
chomp $zeile;
$langezeile = $langezeile . $zeile;
}
#
# extended regular expression (case insensitive, global)
# die Klasse [] enhaelt die erlaubten Zeichen einer Url (vollstandig???)
#
while ($langezeile =~ /<a href=\"(http:[\/\w\d\.\-\?\+\=\%\&]*)\"/ig) {
push @urlsammel, $1 . "
" if $1;
}
#
# aussortieren der doppelten urls
#
foreach $zeile (@urlsammel) {
$flag = 1 ;
foreach $row (@linkliste) {
if ($row eq $zeile) {
undef $flag;
}
}
push @linkliste, $zeile if $flag;
}
#
# loeschen der Ausgabedatei
#
unlink $Trefferliste;
#
# Ausgabe in Zieldatei
#
open(GUN,">>$Trefferliste")||die "Can't open file $Trefferliste";
foreach $ausgabe (@linkliste) {
print GUN $ausgabe;
}
close (GUN) || die "Couldn't close filehandle $Trefferliste";
exit;
---schnapp---
ratte
---schnipp---
#!/usr/local/bin/perl -w
$Trefferliste = "out.datei";
#
# Einlesen der Html-Dateien
#
foreach $datei (@ARGV) {
open(FUN,"<$datei")||die "Can't open file $datei";
@text = <FUN> ;
push @htmltext, @text;
}
close (FUN) ;
#
# init $langezeile
#
$langezeile ="";
#
# Zeilenumbrueche loeschen, alle dateien bilden nun eine zeile
#
foreach $zeile (@htmltext) {
chomp $zeile;
$langezeile = $langezeile . $zeile;
}
#
# extended regular expression (case insensitive, global)
# die Klasse [] enhaelt die erlaubten Zeichen einer Url (vollstandig???)
#
while ($langezeile =~ /<a href=\"(http:[\/\w\d\.\-\?\+\=\%\&]*)\"/ig) {
push @urlsammel, $1 . "
" if $1;
}
#
# aussortieren der doppelten urls
#
foreach $zeile (@urlsammel) {
$flag = 1 ;
foreach $row (@linkliste) {
if ($row eq $zeile) {
undef $flag;
}
}
push @linkliste, $zeile if $flag;
}
#
# loeschen der Ausgabedatei
#
unlink $Trefferliste;
#
# Ausgabe in Zieldatei
#
open(GUN,">>$Trefferliste")||die "Can't open file $Trefferliste";
foreach $ausgabe (@linkliste) {
print GUN $ausgabe;
}
close (GUN) || die "Couldn't close filehandle $Trefferliste";
exit;
---schnapp---
ratte
Re: Perl/Bash-Script zum URL greppen
hi, ich bin's nochmal.
dummerweise schluckt das eingabeformular Teile des Inputs.
push @urlsammel, $1 . " " if $1;
ist falsch, denn in den Anfuehrzeichen soll kein space stehen, sondern ein Backslash und ein kleines n.
d.i. ein newline, damit die url jeweils eine eigene Zeile bekommen.
ratte
dummerweise schluckt das eingabeformular Teile des Inputs.
push @urlsammel, $1 . " " if $1;
ist falsch, denn in den Anfuehrzeichen soll kein space stehen, sondern ein Backslash und ein kleines n.
d.i. ein newline, damit die url jeweils eine eigene Zeile bekommen.
ratte
Re: Perl/Bash-Script zum URL greppen
und weils so schoen spass macht, gleich noch ein anderes script hinterher:
remrem.pl
What the hell is this? It is 'REMoveREMarks'!
remrem.pl deletes lines starting with a '#'
from a given file-one and writes it to file-2
Syntax : /usr/local/bin/remrem.pl inputfile outputfile
---schnipp---
#!/usr/local/bin/perl -w
sub usage {
print "
\What the hell is this? It is \'REMoveREMarks\'!
remrem.pl deletes lines starting with a \'\#\'
from a given file-one and writes it to file-2
Syntax : $0 inputfile outputfile
";
}
if (!$ARGV<font size="1"> or $ARGV<font size="2">) {
usage;
exit;
}
#
# Einlesen der Quell-Datei
#
open(FUN,"<$ARGV[0]")||die "Can't open file $ARGV[0] for reading";
@quelltext = <FUN> ;
close (FUN)||die "Can't close filehandle." ;
open(GUN,">>$ARGV<font size="1">")||die "Can't open file $ARGV<font size="1"> for writing";
foreach $zeile (@quelltext) {
if ( ! ($zeile=~ /^(#+)/ ) ) {
print GUN $zeile;
}
}
close(GUN)||die "Can't close filehandle.";
exit;
---schnapp---
man beachte wieder, dass backslash n hier falsch interpretiert wird.
fun
ratte
remrem.pl
What the hell is this? It is 'REMoveREMarks'!
remrem.pl deletes lines starting with a '#'
from a given file-one and writes it to file-2
Syntax : /usr/local/bin/remrem.pl inputfile outputfile
---schnipp---
#!/usr/local/bin/perl -w
sub usage {
print "
\What the hell is this? It is \'REMoveREMarks\'!
remrem.pl deletes lines starting with a \'\#\'
from a given file-one and writes it to file-2
Syntax : $0 inputfile outputfile
";
}
if (!$ARGV<font size="1"> or $ARGV<font size="2">) {
usage;
exit;
}
#
# Einlesen der Quell-Datei
#
open(FUN,"<$ARGV[0]")||die "Can't open file $ARGV[0] for reading";
@quelltext = <FUN> ;
close (FUN)||die "Can't close filehandle." ;
open(GUN,">>$ARGV<font size="1">")||die "Can't open file $ARGV<font size="1"> for writing";
foreach $zeile (@quelltext) {
if ( ! ($zeile=~ /^(#+)/ ) ) {
print GUN $zeile;
}
}
close(GUN)||die "Can't close filehandle.";
exit;
---schnapp---
man beachte wieder, dass backslash n hier falsch interpretiert wird.
fun
ratte
-
- Posts: 348
- Joined: 28. Dec 2000 13:30
- Location: Muenchen
Re: Perl/Bash-Script zum URL greppen
cat eingabedatei | sed -e "s/.*<a.*=\"//" | sed -e "s/\">.*//" > ausgabedatei
oder
cat eingabedatei | grep http | cut -f2 -d"\"" > ausgabedatei (setzt aber voraus, dass in einer zeile nur die url in " " steht)
oder
cat eingabedatei | grep http | cut -f2 -d"\"" > ausgabedatei (setzt aber voraus, dass in einer zeile nur die url in " " steht)
Linux is a wigwam - no windows, no gates, apache inside <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">