Auslesen aus html code

cybermotte

Grünschnabel
hallo zusammen,

also habe ein problem mit dem code hier, und zwar speichert er mir die daten nicht herraus wie er es machen soll. nach stundenlangem suchen des fehlers kann ich leider nix entdecken, aber vielleicht gibt es jemanden, dem auffällt was ich falsch mache :)

hier mal mein code:

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

#03.05.2004, Version 1.6

use LWP::Simple;
if (@ARGV != 4) {
	$0 =~ s#^.*[\\/]##;
	&quit_program("Gebrauch: $0 [VON OZEAN] [BIS OZEAN] [GUELTIGE SID] [ZIELDATEI]\nBeispiel: $0 1 114 sid=6=n35H6dkfeqxYzMxEeI ozeane.csv\n");
}
$db_file = $ARGV[3];
open(OUTPUT, "> ".$db_file) or &quit_program("Fehler beim Öffnen der Datei $db_file\n$!\n");
$island_number = $ARGV[0]*100-99;
foreach $ocean_number ($ARGV[0]..$ARGV[1]) {
	print "Bearbeite Ozean $ocean_number...\n";
	$url = "http://www.insel-monarchie.de/$ARGV[2]/game/karte.php?ozean=$ocean_number";
	if (!($bigline=get($url))) {
		&quit_program("ABBRUCH! $url nicht erreichbar\n");
	}
	$bigline =~ s/\s+/ /g;
	$bigline =~ s/\\/\\\\/g;
	$bigline =~ s/Allianz: Punkte:/Allianz:  Punkte:/g;
	$bigline =~ s/Insel: Herrscher:/Insel:  Herrscher:/g;
	while ($bigline =~ m#<p title="Insel: (.*?) Herrscher: (.+?) Allianz: (.*?) Punkte: (-?\d+)"><a href="\./karte_user_info.php\?user=\d+"><img src=".+?" border="0"></a><br>(\d+)<br>#g) {
		if ($island_number != $5) {
			&quit_program("ABBRUCH! Fehler beim Parsen von Insel $island_number\n");
		}
		print OUTPUT "$island_number;$ocean_number;\"$1\";\"$2\";\"$3\";\"$4\"\n";
		
		# if ($3 eq "") { print "  Insel $island_number ist Allylos!\n"; }
		
		$island_number++;
	}
	$ocean_number++;
}
&quit_program("ich habe fertig\n");

sub quit_program {
	close(OUTPUT);
	if (@_ > 0) {
		print $_[0];
	}
	print "\nEingabetaste zum Beenden!";	# Diese Zeile entfernen, wenn GUI nicht benutzt wird
	<STDIN>;				# Diese Zeile entfernen, wenn GUI nicht benutzt wird
	die "\n";
}

und hier der html code aus dem ich das haben möchte:

Code:
<p title="Insel: [SK] ~ Island 76Herrscher: starplanetAllianz: [S.O.D.]~[SAM]SikokuPunkte: 904"><a href="./karte_user_info.php?user=6073"><img src="../images/islands/9.gif" border="0"></a><br><span class="karte">4941<br>[SK] ~ Island
76<br><a href="./karte_user_info.php?user=6073" class="karte"></span><span class=karte>starplanet</span></a></td><td width=70 height=70 valign=middle align=center>

wäre echt super wenn jemand helfen könnte, danke für eure mühe im vorraus :)
 
Meine Tipps:

1. Benutze
Code:
use strict; # jetzt musst Du alle Variablen mit 'my' deklarieren
use warnings;
ohne diese solltest Du nie ein Programm schreiben!

2. Sage uns doch bitte, WAS Du aus der HTML-Datei auslesen willst. Ich habe keine Lust, mir da irgendwas anhand Deines Codes zusammenzureimen!

3. Es gibt ein tolles Modul, das nennt sich HTML::parser. Gibt es auf http://search.cpan.org . Damit kann man HTML-Seiten sehr leicht parsen

4. Sage uns doch auch bitte Fehlermeldungen, soweit es welche gibt. Meine Glaskugel ist zur Zeit in Reparatur ;)
 
klar sage ich dir was ich möchte und schon mal danke für deine tipps :) die bringen mich auch auf weitere ideen.

also, ich möchte aus dem html code die daten der Insel: (hier den text), herrscher: , allianz, und die punkte auslesen und in einer datei speicher.

leider kommt keine fehlermeldung, es wird aber auch nichts in die datei gespeichert.

habe geprüft ob die html seite gelesen wird, bis dahin ist alles ok, allerdings zieht er nicht die sachen raus, die ich eben brauche. da ist der wurm drin :(

danke für eure mühe :)
 
leider habe ich es immer noch nicht geschafft es zum laufen zu bringen :(

also nach der vorlage oben im ersten post. habe derweil den tipp für mich selbst umgesetzt, aber das von oben brauch ich trotzdem noch, da es ein teil vom ganzen ist.

bitte schaut mal was daran falsch sein könnte, danke euch
 
Du solltest Dich unbedingt mit HTML::parser auseinandersetzen... Die Informationen, die Du oben genannt hast bekommt man ziemlich fix mit:
Code:
#! /usr/bin/perl

use strict;
use warnings;
use HTML::Parser;

my @infos;
my $p = HTML::Parser->new();
$p->handler(start => \&start_handler,"tagname,attr");
$p->parse_file('html.txt');

sub start_handler{
  return if(shift ne 'p');
  my ($insel,$herrscher,$allianz,$punkte) = shift->{title} =~ /Island\s+(.+)Herrscher:\s+(.+)Allianz:\s+(.+)Punkte:\s+(\d+)/;
  print "insel:\t$insel\nHerrscher:\t$herrscher\nAllianz:\t$allianz\nPunkte:\t$punkte\n";
}
 
Hallo
ich hab das selbe problem wie oben beschrieben

könnte mir jemand die endlösung geben wenn das selbe problem ja schoneinaml bestand


vielen dank im voraus
 
Naja wenn ich das versuche popt die konsole kurz auf und das wars
mehr passiert da nicht

ich bin nicht gue un Perl das geb ich gerne zu aber ich kenne mich schon etwas aus aber ich bekomm es einfach nicht hin

sorry

liegt vielleicht an meiner dummheit *g*
 

Neue Beiträge

Zurück