Re: Links aus html-Seite extrahieren
Hallo, die folgende Lösung funktioniert bereits ganz gut: cat input.html | grep href | perl -pi -e 's/.*href="(.*?)".*/$1/g Komischerweise liefert dieser Befehl nur einen Link, wobei das Orginaldokument zehn enthält: /cgi-bin/search/query.cgi&artikel=A18X55 Also ich kriege diese HTML-Seiten aus einem Lagersystem und muss die Links extrahieren, um weitere Infos von jedem Artikel darzustellen. Die Daten sehen in etwa so aus (Auszug): <html><title>bla</title> bla blubb <h1>bla</h1><a href="/cgi-bin/search/query.cgi&artikel=A18X55"><img border="0" src="/pics/query.gif" /></a> <a href="/cgi-bin/search/query.cgi&artikel=B11A03">Artikel B11A03</a> <a href="/cgi-bin/search/query.cgi&artikel=Z20B47">Arikel Z20B47</a> <h1>bla</h1> <hr>bla blubb </html> Wie extrahiere ich diese (alle!) query.cgi-Links aus der Datei? Vielen Dank und schöne Grüße, Werner.
Hallo, On Tue, 11 Mar 2003, Werner Schalk wrote:
die folgende Lösung funktioniert bereits ganz gut:
cat input.html
Useless use of cat!
| grep href
Useless use of grep!
| perl -pi -e 's/.*href="(.*?)".*/$1/g
*autsch* Wieso -i???? [X] Du willst dir dringend 'man perlrun' zu Gemuete fuehren! 's/.*href="(.*?)".*/$1/g' ^^^^-. ^^-> FLASCH! Du willst [^"]* verwenden! \ Warum? -> man perlre. `-> deswegen ist das grep ueberfluessig! -dnh -- At least Microsoft offers updates to keep your selection of bugs fresh. -- Alan Shutko, hating Corel even more, in asr
Hi David, ich habe momentan folgendes Konstrukt (entnommen der vorhergehenden Mail von Dir): perl -W -n -i 'input.html' -e 's/href="\([^"]*\)"/\1/g' Leider scheint der den Quellcode der HTML-Datei als Code zu interpretieren, da ich folgende Meldungen bekomme (gekürzt): Bareword found where operator expected at input.file line 1, near "<TITLE>Search" (Missing operator before Search?) String found where operator expected at input.file line 3, near "
Hallo Werner!
ich habe momentan folgendes Konstrukt (entnommen der vorhergehenden Mail von Dir):
perl -W -n -i 'input.html' -e 's/href="\([^"]*\)"/\1/g'
Leider scheint der den Quellcode der HTML-Datei als Code zu interpretieren, da ich folgende Meldungen bekomme (gekürzt): [...viele Meldungen...]
Also Du solltest Dir wirklich mal die Man-Pages von Perl zu Gemüte führen. Die Punkte im einzelnen: 1. Der Dateiname muß hinten stehen, sonst versucht Perl, die Datei als Programmdatei auszuführen. Daher die Fehlermeldungen. 2. Wenn Du um den Perl-Ausdruck einfache Anführungszeichen setzt, brauchst Du die Klammern nicht mit Backslashes zu quoten. 3. Ich verstehe nicht ganz, wie der Befehl Dir überhaupt helfen soll. Soweit ich Deinen vorhergehenden Postings entnommen habe, möchtest Du die URLs extrahieren. Was der Befehl da oben macht, ist etwas ganz anderes. Mit der Option "-i" gibst Du an, daß Perl die angegebene Datei nehmen und den hinter der Option "-e" angegebenen Befehl darauf anwenden soll. Das Ergebnis dieser Anwendung soll dann in die Datei zurückgeschrieben werden. Die Datei wird als in place verändert. Ist das wirklich das, was Du tun willst? Mit dem Ausdruck "s///g" (wenn schon, dann würde ich "s///ig" verwenden, damit Du auch sowas wie "HREF=..." erwischst), werden in der angegebenen Datei alle Ausdrücke der Form 'href="..."' ersetzt durch das, was zwischen den Anführungszeichen steht. Damit dürftest Du alle Links in der Datei zerstören, aber nicht extrahieren. Aber selbst wenn Du die Option "-i" wegläßt und aus dem Ausdruck "s///ig" einen der Form "m//ig" machst, wird nichts extrahiert. Mit der "-e"-Option liefert Dir Perl das Ergebnis der Anwendung des Perl-Ausdrucks auf die Datei nur auf stdout. Damit bekommst Du lediglich die Datei ausgegeben. Ich würde gar nicht versuchen, einen komplizierten Ausdruck in einer Zeile anzugeben. Stattdessen schreib Dir ein kleines Script und ruf dann das auf. Das dürfte einfacher und verständlicher sein. Hier ein Beispiel - vielleicht tut's das ja für Deine Zwecke schon: #!/usr/bin/perl $file = shift(@ARGV); open(FILE, $file); while (<FILE>) { if (m/href="([^"]*)"/ig) { print "$1\n"; }; } close(FILE); Wenn Du das in eine Datei names "linkExtractor.pl" schreibst und diese ausführbar machst, dann bekommst Du mit "linkExtractor.pl irgendeineDatei.html" aus dieser alle URLs extrahiert (Natürlich nur, solange sie in einer Zeile stehen). Gruß, Alex. -- Alexander Glintschert, MicroDiscovery GmbH Marienburger Strasse 1, D-10405 Berlin, Germany Tel.: +49-(0)30-44350900, Fax: +49-(0)30-443509010 alexander.glintschert@microdiscovery.de http://www.microdiscovery.de
Hallo, On Tue, 11 Mar 2003, Alexander Glintschert wrote:
ich habe momentan folgendes Konstrukt (entnommen der vorhergehenden Mail von Dir):
perl -W -n -i 'input.html' -e 's/href="\([^"]*\)"/\1/g'
*URGSL* Wieso nimmst du jetzt den sed-Befehl? Lies bitte mal 'man perlrun'!
Ich würde gar nicht versuchen, einen komplizierten Ausdruck in einer Zeile anzugeben.
Das ist nicht kompliziert, wenn man's richtig schreibt. Was ist an perl -ne 'm/href="([^"]*)"/ig and print "$1\n"' kompliziert? Natuerlich geht auch perl -ne 'if( m/href="([^"]*)"/ig ) { print "$1\n"; }' oder perl -ne 'print "$1\n" if m/href="([^"]*)"/ig' TMTOWTDI :-) -dnh --
Mit "T" wie "Timeo danaos et dona ferentes"? "Quidquid Ihr eat, timeo danone et donuts ferenghi!" -- V. Gringmuth und KK in darw
* Werner Schalk
Hallo,
die folgende Lösung funktioniert bereits ganz gut:
cat input.html | grep href | perl -pi -e 's/.*href="(.*?)".*/$1/g
Komischerweise liefert dieser Befehl nur einen Link, wobei das Orginaldokument zehn enthält:
nee, kann nicht sein ... das fragment von unten ray@rayman:/RAY/111 > cat input.html | grep href | perl -pi -e 's/.*href="(.*?)".*/$1/g' /cgi-bin/search/query.cgi&artikel=A18X55 /cgi-bin/search/query.cgi&artikel=B11A03 /cgi-bin/search/query.cgi&artikel=Z20B47 ray@rayman:/RAY/111 >
/cgi-bin/search/query.cgi&artikel=A18X55
Also ich kriege diese HTML-Seiten aus einem Lagersystem und muss die Links extrahieren, um weitere Infos von jedem Artikel darzustellen. Die Daten sehen in etwa so aus (Auszug):
<html><title>bla</title> bla blubb <h1>bla</h1><a href="/cgi-bin/search/query.cgi&artikel=A18X55"><img border="0" src="/pics/query.gif" /></a> <a href="/cgi-bin/search/query.cgi&artikel=B11A03">Artikel B11A03</a> <a href="/cgi-bin/search/query.cgi&artikel=Z20B47">Arikel Z20B47</a>
<h1>bla</h1> <hr>bla blubb </html>
Wie extrahiere ich diese (alle!) query.cgi-Links aus der Datei?
Vielen Dank und schöne Grüße, Werner.
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-programming-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-programming-help@suse.com
--
echo '@a=(A..Z,a..z," ");$t="a"x16;{for($x=0,$|=$n=30; $n--;){for($l=$t;
1
participants (4)
-
Alexander Glintschert
-
David Haller
-
Remo Behn
-
Werner Schalk