Perl/Bash-Script zum URL greppen

Software besorgen und anwenden
Post Reply
Message
Author
mirror

Perl/Bash-Script zum URL greppen

#1 Post by mirror »

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

ratte

Re: Perl/Bash-Script zum URL greppen

#2 Post by ratte »

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

mirror

Re: Perl/Bash-Script zum URL greppen

#3 Post by mirror »

danke!!

cu, mirror

ratte

Re: Perl/Bash-Script zum URL greppen

#4 Post by ratte »

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

ratte

Re: Perl/Bash-Script zum URL greppen

#5 Post by ratte »

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

ratte

Re: Perl/Bash-Script zum URL greppen

#6 Post by ratte »

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

ratte

Re: Perl/Bash-Script zum URL greppen

#7 Post by ratte »

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

cerberusger
Posts: 348
Joined: 28. Dec 2000 13:30
Location: Muenchen

Re: Perl/Bash-Script zum URL greppen

#8 Post by cerberusger »

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)
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">

Post Reply