phpbar.de logo

Mailinglisten-Archive

[php] HTML-Seite parsen

[php] HTML-Seite parsen

Reinhold Jordan php_(at)_phpcenter.de
Tue, 14 May 2002 13:26:30 +0200


Hi Mathias,

> ich bräuchte halt mehrere verschiedene Elemente, von denen ich weiß,
> wo sie stehen (das bleibt auch immer so). Mal ein wert von der einen
> Tabelle,
> mal mehrere einer anderen ...

also ich spiegel auf meiner Seite eine Tabelle von einer fremden Seite.
Den Quelltext habe ich in einem File, lese sie ein und schneide die
Tabelle heraus:

$mtab = pagefile("/home/www/mirror/marcin-wiacek.fkn.pl/english/zips/download.htm","table");

Dann lese ich die Tabelle in ein Array:

$mtab = parsetable($mtab);

und baue damit meine eigene Tabelle...

Die Funktionen hierzu sehen so aus:



// read a file and return a part of it. F.e. a table from a html-file

function pagefile($filename,$delimiter)
{
$fp = _(at)_fopen($filename, "r");

$file ="";
if ($fp) {
   $file=fread($fp,filesize($filename));

   $pos1=strpos(" ".$file,"<$delimiter",0);
   $pos2=strpos(" ".$file,"</$delimiter>",0);
   if (($pos1>0) && ($pos1 < $pos2) && ($pos2>0)) {
      $pos3=strpos(" ".$file,">",$pos1);
      $file=substr($file,$pos3,$pos2-$pos3-1);
      }
   }

return $file;
}

// read a html-table into an array

function parsetable($tab)
{
unset($ret);
$lc=0;
$tabi = strtolower($tab);

do {
   $pos1=strpos(" ".$tabi,"<tr",0);
   $pos2=strpos(" ".$tabi,"<tr",$pos1+1);
   if (!$pos2) {
      $pos2=strlen($tab);
      }
   if (($pos1>0) && ($pos1 < $pos2) && ($pos2>0)) {
      $pos3=strpos(" ".$tabi,">",$pos1);
      $line=substr($tab,$pos3,$pos2-$pos3-1);
      $linei=substr($tabi,$pos3,$pos2-$pos3-1);
      $tab=substr($tab,$pos2-1);
      $tabi=substr($tabi,$pos2-1);

      unset($fields);
      $fc=0;
      
      do {
         $pos21=strpos(" ".$linei,"<td",0);
         $pos22=strpos(" ".$linei,"</td>",0);
         if (($pos21>0) && ($pos21 < $pos22) && ($pos22>0)) {
            $pos23=strpos(" ".$linei,">",$pos21);
            $field=substr($line,$pos23,$pos22-$pos23-1);
            $line=substr($line,$pos22+4);
            $linei=substr($linei,$pos22+4);

            $fields[$fc] = $field;
            $fc++;
            }
         }
      while ($pos21 < $pos22);

      $ret[$lc] = $fields;
      $lc++;
      }
   }
while ($pos1 > 0);

return $ret;
}


Jetzt mußt Du nur noch wissen, wie Du die verschiedenen Tabellen
unterscheidest...

> Dummerweise ist der Quelltext noch schlimmer, als wenn man ihn mit Front-
> page erstellt hätte *seufz*.

Frontpage läßt sich nur schwer toppen ;)

Gruß, Reinhold

-- 
                       Reinhold Jordan
WWW: http://reinhold.bachrain.de    Mail: reinhold_(at)_bachrain.de
"Do you pine for the nice days of minix-1.1, when men were men
and wrote their own device drivers?"                     Linus


php::bar PHP Wiki   -   Listenarchive