Text/Zeile aus HTML-Seite extrahieren

hudo

Mitglied
Hallo,

ich moechte von mobile.de alle Angebote von best. Marken (zB Adria Wohnwagen)
downloaden. Auf einer Seite sind immer 20 Angebote ausgegeben. An die jeweils
naechsten 20 Angebote komme ich indem der Parameter &top=21 mitgegeben wird:

'http://www.mobile.de/SID.hWVIki2L-c0NtGY1DBC5w-t-vaNexlCsAsK%F3P~BmSB10LsearchPublicJ1067382559A1LsearchPublicIMotorhomeS-t-vpLtt~BmPA1B20A0/cgi-bin/searchPublic.pl?_form=search&sr_make=400&top=21',

Auf jeder Seite befindet sich eine Zeile die in etwa so aussieht

<td height=14 valign="top" class=small><nobr><A onmouseover="window.status = 'letzte Seite'; return true;" onmouseout="window.status='';" HREF="http://www.mobile.de/SID1ahNXjaxupyK6DR2bJj0Iw-t-vaNexlCsAsK%F3P%F3R~BmSB10LsearchPublicJ1067436348A1LsearchPublicIMotorhomeY-t-vctpLtt~BmPA1A1B20C242X-t-vMk_xsO~BSRA6C400A0A0/cgi-bin/searchPublic.pl?bereich=womo&top=241&" CLASS="small"><FONT COLOR="#333333" CLASS="small">letzte Seite</FONT></A></nobr></td>

Das besondere An dieser Zeile ist der Text "letzte Seite" und der Parameter
top=241 der mir angibt mit welchem Parameter die letzte Seite geladen wird.

Nun zu meinem eigentlichen Problem: wie extrahiere ich die top=241

Oder gibt es gar eine Moeglichkeit alle (relevanten) Seiten am Stueck
herunterzuladen

Anbei mein draft-Code :

---------------------------------------------------------------------------------
#!/usr/bin/perl -w

#!/usr/bin/perl -MLWP::Simple -e "getprint 'http://$ARGV[0]'" > $file

#use strict;
use warnings;
use LWP::Simple;
#use LWP::UserAgent;
my $i=1;

### http://www.mobile.de/SID.hWVIki2L-c...zipRadiusTo=-2&sr_sortOrder=0&sr_daysOldTo=-2

#'http://www.mobile.de/SID.hWVIki2L-c0NtGY1DBC5w-t-vaNexlCsAsK%F3P~BmSB10LsearchPublicJ1067382559A1LsearchPublicIMotorhomeS-t-vpLtt~BmPA1B20A0/cgi-bin/searchPublic.pl?_form=search&sr_model=&doSearch.x=38&doSearch.y=16&sr_priceFrom=-2&sr_priceTo=-2&sr_mileageFrom=-2&sr_mileageTo=-2&sr_registrationDateFrom=-2&sr_registrationDateTo=-2&sr_category=-2&sr_powerRange=-2&sr_color=-2&sr_engineType=-2&sr_country=-2&sr_zip=&sr_zipRadiusTo=-2&sr_sortOrder=0&sr_daysOldTo=-2&sr_make=400&top=241',

foreach my $url (
'http://www.mobile.de/SID.hWVIki2L-c0NtGY1DBC5w-t-vaNexlCsAsK%F3P~BmSB10LsearchPublicJ1067382559A1LsearchPublicIMotorhomeS-t-vpLtt~BmPA1B20A0/cgi-bin/searchPublic.pl?_form=search&sr_model=&doSearch.x=38&doSearch.y=16&sr_priceFrom=-2&sr_priceTo=-2&sr_mileageFrom=-2&sr_mileageTo=-2&sr_registrationDateFrom=-2&sr_registrationDateTo=-2&sr_category=-2&sr_powerRange=-2&sr_color=-2&sr_engineType=-2&sr_country=-2&sr_zip=&sr_zipRadiusTo=-2&sr_sortOrder=0&sr_daysOldTo=-2&sr_make=400',
'http://www.mobile.de/SID.hWVIki2L-c0NtGY1DBC5w-t-vaNexlCsAsK%F3P~BmSB10LsearchPublicJ1067382559A1LsearchPublicIMotorhomeS-t-vpLtt~BmPA1B20A0/cgi-bin/searchPublic.pl?_form=search&sr_model=&doSearch.x=38&doSearch.y=16&sr_priceFrom=-2&sr_priceTo=-2&sr_mileageFrom=-2&sr_mileageTo=-2&sr_registrationDateFrom=-2&sr_registrationDateTo=-2&sr_category=-2&sr_powerRange=-2&sr_color=-2&sr_engineType=-2&sr_country=-2&sr_zip=&sr_zipRadiusTo=-2&sr_sortOrder=0&sr_daysOldTo=-2&sr_make=700',
'http://www.mobile.de/SID.hWVIki2L-c0NtGY1DBC5w-t-vaNexlCsAsK%F3P~BmSB10LsearchPublicJ1067382559A1LsearchPublicIMotorhomeS-t-vpLtt~BmPA1B20A0/cgi-bin/searchPublic.pl?_form=search&sr_model=&doSearch.x=38&doSearch.y=16&sr_priceFrom=-2&sr_priceTo=-2&sr_mileageFrom=-2&sr_mileageTo=-2&sr_registrationDateFrom=-2&sr_registrationDateTo=-2&sr_category=-2&sr_powerRange=-2&sr_color=-2&sr_engineType=-2&sr_country=-2&sr_zip=&sr_zipRadiusTo=-2&sr_sortOrder=0&sr_daysOldTo=-2&sr_make=1000',
'http://www.mobile.de/SID.hWVIki2L-c0NtGY1DBC5w-t-vaNexlCsAsK%F3P~BmSB10LsearchPublicJ1067382559A1LsearchPublicIMotorhomeS-t-vpLtt~BmPA1B20A0/cgi-bin/searchPublic.pl?_form=search&sr_make=400&top=241'
) {


#my $html = get ("$url")
#or die "Couldnt get ist\n";
#$html =~ m{letzte Seite};
#print "$html\n";

my $file =$ARGV[0] || die "Filename angeben !\n";
my $status = getstore( $url, "$file-$i.html" );

$i=$i+1;
}

#my $status = get "http://$url" > $file.html;

--------------------------------------------------------------------

Dank im Voraus
 
Evtl. mit einem einfachen Regex?

Code:
$string =~ /top=(\d+)&/;
print $1;

Problem ist nur, das so auch dein top=21 gefunden wird.

Wenn allerdings dein String so wie du ihn hier zeigst auch immer auf der Seite ist, wäre folgender RegEx besser:

Code:
$string =~ /bereich=womo&top=(\d+)&"/;
print $1;
 
Hallo,

ich habe mir dass in etwa so vorgestellt:

foreach my $url (
'http://www.mobile.de/SID.hWVIki2L-c0NtGY1DBC5w-t-vaNexlCsAsK%F3P~BmSB10LsearchPublicJ1067382559A1LsearchPublicIMotorhomeS-t-vpLtt~BmPA1B20A0/cgi-bin/searchPublic.pl?_form=search&sr_model=&doSearch.x=38&doSearch.y=16&sr_priceFrom=-2&sr_priceTo=-2&sr_mileageFrom=-2&sr_mileageTo=-2&sr_registrationDateFrom=-2&sr_registrationDateTo=-2&sr_category=-2&sr_powerRange=-2&sr_color=-2&sr_engineType=-2&sr_country=-2&sr_zip=&sr_zipRadiusTo=-2&sr_sortOrder=0&sr_daysOldTo=-2&sr_make=400',
'http://www.mobile.de/SID.hWVIki2L-c0NtGY1DBC5w-t-vaNexlCsAsK%F3P~BmSB10LsearchPublicJ1067382559A1LsearchPublicIMotorhomeS-t-vpLtt~BmPA1B20A0/cgi-bin/searchPublic.pl?_form=search&sr_model=&doSearch.x=38&doSearch.y=16&sr_priceFrom=-2&sr_priceTo=-2&sr_mileageFrom=-2&sr_mileageTo=-2&sr_registrationDateFrom=-2&sr_registrationDateTo=-2&sr_category=-2&sr_powerRange=-2&sr_color=-2&sr_engineType=-2&sr_country=-2&sr_zip=&sr_zipRadiusTo=-2&sr_sortOrder=0&sr_daysOldTo=-2&sr_make=700',
'http://www.mobile.de/SID.hWVIki2L-c0NtGY1DBC5w-t-vaNexlCsAsK%F3P~BmSB10LsearchPublicJ1067382559A1LsearchPublicIMotorhomeS-t-vpLtt~BmPA1B20A0/cgi-bin/searchPublic.pl?_form=search&sr_model=&doSearch.x=38&doSearch.y=16&sr_priceFrom=-2&sr_priceTo=-2&sr_mileageFrom=-2&sr_mileageTo=-2&sr_registrationDateFrom=-2&sr_registrationDateTo=-2&sr_category=-2&sr_powerRange=-2&sr_color=-2&sr_engineType=-2&sr_country=-2&sr_zip=&sr_zipRadiusTo=-2&sr_sortOrder=0&sr_daysOldTo=-2&sr_make=1000',
'http://www.mobile.de/SID.hWVIki2L-c0NtGY1DBC5w-t-vaNexlCsAsK%F3P~BmSB10LsearchPublicJ1067382559A1LsearchPublicIMotorhomeS-t-vpLtt~BmPA1B20A0/cgi-bin/searchPublic.pl?_form=search&sr_make=400&top=241'
) {

#### hier wird die Zeile extrahiert die den Text "letzte Zeile" enthaelt:

my $html = get ("$url") | grep "letzte Zeile" ;

#### so dass in $html nun die Zeile entsprechende gespeichert ist
#### aber so gehts natuerlich nicht (nur sinngemaess)
 
Sofern die von mobile.de generierte Seite Zeilenumbrüche enthält, würde ich das dann so machen:

Code:
foreach my $zeile (split(/\n/, $seite)) {
   if($zeile =~ /letzte zeile/) {
      # tu was mit deiner zeile ;)
   }
}
 

Neue Beiträge

Zurück