From werner_schalk@gmx.de Mon Mar 10 23:48:00 2003 From: Werner Schalk To: programming-de@lists.opensuse.org Subject: Re: Links aus html-Seite extrahieren Date: Tue, 11 Mar 2003 00:48:41 +0100 Message-ID: <200303110048.41839.werner_schalk@gmx.de> In-Reply-To: <20030310184811.GD2707@suse.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0694336139383419464==" --===============0694336139383419464== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit 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): bla bla blubb

bla

Artikel B11A03 Arikel Z20B47

bla


bla blubb Wie extrahiere ich diese (alle!) query.cgi-Links aus der Datei? Vielen Dank und schöne Grüße, Werner. --===============0694336139383419464==-- From lists@dhaller.de Tue Mar 11 02:10:47 2003 From: David Haller To: programming-de@lists.opensuse.org Subject: Re: Links aus html-Seite extrahieren Date: Tue, 11 Mar 2003 03:09:41 +0100 Message-ID: <20030311020941.GA12616@feersum.endjinn.de> In-Reply-To: <200303110048.41839.werner_schalk@gmx.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3591563679330091624==" --===============3591563679330091624== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit 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 --===============3591563679330091624==-- From werner_schalk@gmx.de Tue Mar 11 07:36:56 2003 From: Werner Schalk To: programming-de@lists.opensuse.org Subject: Re: Links aus html-Seite extrahieren Date: Tue, 11 Mar 2003 08:37:40 +0100 Message-ID: <200303110837.40980.werner_schalk@gmx.de> In-Reply-To: <20030311020941.GA12616@feersum.endjinn.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3322518726938329468==" --===============3322518726938329468== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi David, ich habe momentan folgendes Konstrukt (entnommen der vorhergehenden Mail von Dir): perl -W -n -i 'input.html' -e 's/href=3D"\([^"]*\)"/\1/g' Leider scheint der den Quellcode der HTML-Datei als Code zu interpretieren, da ich folgende Meldungen bekomme (gek=C3=BCrzt): Bareword found where operator expected at input.file line 1, near=20 "Search" (Missing operator before Search?) String found where operator expected at input.file line 3, near "<link rel=3D= "" (Might be a runaway multi-line "" string starting on line 1) (Missing semicolon on previous line?) Bareword found where operator expected at input.file line 3, near "<link=20 rel=3D"stylesheet" (Missing operator before stylesheet?) Unquoted string "stylesheet" may clash with future reserved word at input.fil= e=20 line 3. String found where operator expected at input.file line 3, near "stylesheet" = href=3D"" Unquoted string "templates" may clash with future reserved word at input.file= =20 line 3. Unquoted string "css" may clash with future reserved word at input.file line = 3. String found where operator expected at input.file line 3, near "css" type=3D= "" Bareword found where operator expected at input.file line 3, near ""=20 type=3D"text" (Missing operator before text?) Unquoted string "text" may clash with future reserved word at input.file line= =20 3. Unquoted string "css" may clash with future reserved word at input.file line = 3. String found where operator expected at input.file line 5, near "<style=20 type=3D"" (Might be a runaway multi-line "" string starting on line 3) (Missing semicolon on previous line?) Bareword found where operator expected at input.file line 5, near "<style=20 type=3D"text" (Missing operator before text?) Unquoted string "text" may clash with future reserved word at input.file line= =20 5. Unquoted string "css" may clash with future reserved word at input.file line = 5. String found where operator expected at input.file line 13, near "<link rel= =3D"" (Might be a runaway multi-line "" string starting on line 5) (Missing semicolon on previous line?) Bareword found where operator expected at input.file line 13, near "<link=20 rel=3D"shortcut" (Missing operator before shortcut?) Bareword found where operator expected at input.file line 13, near ""=20 href=3D"http" Was mache ich falsch? Danke und viele Gr=C3=BC=C3=9Fe, Werner. --===============3322518726938329468==-- From alexander.glintschert@microdiscovery.de Tue Mar 11 09:01:27 2003 From: Alexander Glintschert <alexander.glintschert@microdiscovery.de> To: programming-de@lists.opensuse.org Subject: Re: Links aus html-Seite extrahieren Date: Tue, 11 Mar 2003 10:00:05 +0100 Message-ID: <m3zno246sq.fsf@gi.microdiscovery> In-Reply-To: <200303110837.40980.werner_schalk@gmx.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2546051207195540655==" --===============2546051207195540655== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit 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(a)microdiscovery.de http://www.microdiscovery.de --===============2546051207195540655==-- From ray@suse.de Tue Mar 11 09:10:54 2003 From: Remo Behn <ray@suse.de> To: programming-de@lists.opensuse.org Subject: Re: Links aus html-Seite extrahieren Date: Tue, 11 Mar 2003 10:11:29 +0100 Message-ID: <20030311091127.GA4615@suse.de> In-Reply-To: <200303110048.41839.werner_schalk@gmx.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7414748497182714103==" --===============7414748497182714103== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable * Werner Schalk <werner_schalk(a)gmx.de> [030311 00:48]: > Hallo, >=20 > die folgende L=C3=B6sung funktioniert bereits ganz gut: >=20 > cat input.html | grep href | perl -pi -e 's/.*href=3D"(.*?)".*/$1/g >=20 > Komischerweise liefert dieser Befehl nur einen Link, > wobei das Orginaldokument zehn enth=C3=A4lt: nee, kann nicht sein ... das fragment von unten ray(a)rayman:/RAY/111 > cat input.html | grep href | perl -pi -e 's/.*href=3D= "(.*?)".*/$1/g' /cgi-bin/search/query.cgi&artikel=3DA18X55 /cgi-bin/search/query.cgi&artikel=3DB11A03 /cgi-bin/search/query.cgi&artikel=3DZ20B47 ray(a)rayman:/RAY/111 > > /cgi-bin/search/query.cgi&artikel=3DA18X55 >=20 > 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): >=20 > <html><title>bla > bla > blubb >

bla

href=3D"/cgi-bin/search/query.cgi&artikel=3DA18X55"> src=3D"/pics/query.gif" /> href=3D"/cgi-bin/search/query.cgi&artikel=3DB11A03">Artikel B11A03 href=3D"/cgi-bin/search/query.cgi&artikel=3DZ20B47">Arikel Z20B47 >=20 >

bla

>
bla > blubb > >=20 > Wie extrahiere ich diese (alle!) query.cgi-Links aus der Datei? >=20 > Vielen Dank und sch=C3=B6ne Gr=C3=BC=C3=9Fe, > Werner. >=20 >=20 > -- > Um die Liste abzubestellen, schicken Sie eine Mail an: > suse-programming-unsubscribe(a)suse.com > Um eine Liste aller verf=C3=BCgbaren Kommandos zu bekommen, schicken > Sie eine Mail an: suse-programming-help(a)suse.com >=20 --=20 echo '@a=3D(A..Z,a..z," ");$t=3D"a"x16;{for($x=3D0,$|=3D$n=3D30; $n--;){for($= l=3D$t; 1 To: programming-de@lists.opensuse.org Subject: Re: Links aus html-Seite extrahieren Date: Tue, 11 Mar 2003 16:14:11 +0100 Message-ID: <20030311151411.GA2665@feersum.endjinn.de> In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3277269490605175215==" --===============3277269490605175215== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit 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 --===============3277269490605175215==--