[Thread Prev][Thread Next]   >Date Index >Thread Index

Re: LWP::Simple Verständnisfrage

Joerg Meltzer - Wed Dec 12 10:08:10 2007

Hallo zusammen,

Sehr wahr, HTML::TableExtract ist praktisch. Ich verwende es auch oft.

Allerdings tut man sich manchmal schwer mit Headern, die in mehreren
Tabellen gleich benannt sind.
Dann muss man Manuell die Tabellenkoordinaten herausfinden.

Für einen unkritischen Quickhack in einfachen Seiten reicht die
Regexversion voll und ganz.
Solche kleinen Aufgaben sind hervorragend geeignet, um das Standard
Perl Repertoire einzuüben und neue Sachen auszuprobieren.

Gruß,
  Jörg


marek.rouchal@infineon.com schrieb:
> Hallo allerseits,
>
> ich empfehle, das HTML durch HTML::Parser zu jagen, und
> dann dort gezielt nach <tt> tags suchen. Das ist vermutlich
> wesentlich robuster als jede regexp.
> Halt, es geht noch besser: HTML::TableExtract
>
> Gruss,
>
> Marek
>
>
> -----Original Message-----
> From: owner-perl-mongers@42.org [mailto:owner-perl-mongers@42.org] On
Behalf Of Joerg Meltzer
> Sent: Tuesday, December 11, 2007 9:26 PM
> To: Stefan Bauer
> Cc: perl-mongers@42.org
> Subject: Re: LWP::Simple Verständnisfrage
>
>
> Hallo Stefan,
>
> Du verwendest unnötigerweise ein Zeilensplitting.
> Ausserdem solltest du Minimum Matches .*? anstatt greedy .* verwenden.
>
> #!/usr/bin/perl -w
> use strict;
> use LWP::Simple;
> my $url = 'http://www.debian.org/security/2007/';
>
> my @meldung;
> my @ct = get($url) =~ m/<tt>\[(.*?)\]<\/tt> <strong><a
> href=".\/(dsa-.*?)">/gms;
>
> while ( @ct > 1) {
>    eintrag_erstellen( shift(@ct), shift(@ct));
> }
> print @meldung;
>
> sub eintrag_erstellen {
>     my ( $datum, $link ) = @_;
>     my $meldung = $link . ' vom ' . $datum . "\n";
>     push( @meldung, $meldung );
> }
> __END__
>
> Stefan Bauer schrieb:
>> Hallo Liste,
>>
>> #!/usr/bin/perl -w
>> use strict;
>> use LWP::Simple;
>> my $url = 'http://www.debian.org/security/2007/';
>> my @meldung;
>> my @webseite = get($url);
>> foreach my $line (@webseite) {
>> if ($line =~ m/<tt>\[(.*)\]<\/tt> <strong><a href=".\/(dsa-.*)">/) {
>> eintrag_erstellen($1, $2);
>> }
>> }
>> print @meldung;
>>
>> sub eintrag_erstellen {
>> my ($datum, $link) = @_;
>> my $meldung = $link . ' vom ' . $datum . "\n";
>> push (@meldung, $meldung);
>> }
>>
>>
>> Leider enthällt @meldung nur genau einen Treffer, die regex sollte
>> vielmehr in der $url finden. Was hab ich vergessen? *grübel* Ich seh
>> gerade den Wald vor lauter Bäumen nicht.
>>
>> Gruß
>>
>>
>
>
> --
> Jörg Meltzer * joerg.meltzer@tngtech.com * +49-176-22664106
> TNG Technology Consulting GmbH, Betastr. 13a, 85774 Unterföhring
> Geschäftsführer: Henrik Klagges, Gerhard Müller, Christoph Stock
> Amtsgericht München, HRB 135082
>


-- 
Jörg Meltzer * joerg.meltzer@tngtech.com * +49-176-22664106
TNG Technology Consulting GmbH, Betastr. 13a, 85774 Unterföhring
Geschäftsführer: Henrik Klagges, Gerhard Müller, Christoph Stock
Amtsgericht München, HRB 135082


Next: