• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Html Bereich auslesen und weiterverarbeiten.

Hauser

Neues Mitglied
Hallo Forum.

bin auf der Suche nach einer passenden Lösung. Habe hier 35.000 Html-Fles und möchte einen bestimmten Eintrag auslesen und diese dann in eine csv speichern.

Der Bereich ist dieser:

HTML:
<table width="450" border="0" cellpadding="0" cellspacing="0">
  <tbody><tr valign="top">
    <td class="row1" align="left"><strong>Trinkglas 66105</strong>     <br><textarea cols="86" rows="6" class="readonly2" readonly="readonly">Kindergeschirr „Playmobil“
• Lebensmittelecht 
• Spülmaschinengeeignet 
• Acryl 
• Ø x H: 5 x 10,5 cm 
• 0,225 Liter</textarea>
</td>
  </tr>
</tbody></table>

Das Script habe verwende ich dafür:

PHP:
<?php

error_reporting(E_ALL);
ini_set('display_errors', '1'); 


$host = "http://localhost/klemz/artikel/488145.html";
$filestring = file_get_contents($host);
$startpos = 0;

while($pos = strpos($filestring, '<td class="row1" align="left">', $startpos))
{
    $string = substr($filestring, $pos, strpos($filestring, '<td valign="top">', $pos + 1) - $pos);
        
    $reg = '#<strong>(.+)<\/strong>\s*<br>\s*(<textarea cols="86" rows="6" class="readonly2" readonly="readonly">(.+)<\/textarea>\s*)?#';       
    
    preg_match_all($reg, $string, $content); 
    
    echo '<pre>', var_dump($content, true), '</pre>';
   
    $startpos = $pos +1;
    
}


?>

Das Ergebnis ist noch nicht so pralle:

HTML:
array(4) {
  [0]=>
  array(1) {
    [0]=>
    string(41) "Trinkglas 66105     
"
  }
  [1]=>
  array(1) {
    [0]=>
    string(15) "Trinkglas 66105"
  }
  [2]=>
  array(1) {
    [0]=>
    string(0) ""
  }
  [3]=>
  array(1) {
    [0]=>
    string(0) ""
  }
}
bool(true)
array(4) {
  [0]=>
  array(0) {
  }
  [1]=>
  array(0) {
  }
  [2]=>
  array(0) {
  }
  [3]=>
  array(0) {
  }
}
bool(true)

Also meine PHP Kenntnisse sind Anfänger :oops:.

Ich hoffe ihr könnt mir etwas weiterhelfen. Danke
 
Ja genau, ich möcht die Informationen:

Trinkglas 66105

und

Kindergeschirr „Playmobil“
• Lebensmittelecht
• Spülmaschinengeeignet
• Acryl
• Ø x H: 5 x 10,5 cm
• 0,225 Liter

haben.


 
Du kannst mit strip_tags arbeiten, z.B. so:

PHP:
<?php

$host = "http://localhost/klemz/artikel/488145.html";
$filestring = strip_tags(file_get_contents($host));

?>

Oder wenn du auf Reguläre Ausdrücke zurückgreifen willst, gibts noch folgendes:

RegExr
Umschalten auf Replace, 2te Zeile leer machen, in der Textarea den Code einfügen

Pattern ist: (<.+?>)
Einfach mit preg_replace("/(<.+?>)/", "", $string); anwenden ;D
 
Erst mal Danke für die Infos, ich habe mich jetzt überall mal eingelesen und dieses Script entworfen:

PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1'); 


$dir = opendir("c:/xampp/htdocs/klemz/artikel/");

 while ($entry = readdir($dir)) 
 
 {
 

     $host = ("http://localhost/klemz/artikel/" . $entry . "");
    $filestring = file_get_contents($host);


    $startpos = 0;
    while($pos = strpos($filestring, '<td class="row1" align="left">', $startpos))


            {
                $string = substr($filestring, $pos, strpos($filestring, "</textarea>", $pos + 1) - $pos);
    
                                
                $data = strip_tags($string);
                
                echo '<pre>', $data, '</pre>';
                
                
        
            
            $startpos = $pos + 1;

            } 
 }

?>
Das Ergebnis sieht dann so aus:

HTML:
Schale 66114     Kindergeschirr „Playmobil“
• Lebensmittelecht 
• Spülmaschinengeeignet 
• Melamin 
• Ø: 16 cm

Trinkglas 66105     Kindergeschirr „Playmobil“
• Lebensmittelecht 
• Spülmaschinengeeignet 
• Acryl 
• Ø x H: 5 x 10,5 cm 
• 0,225 Liter

Platzset 66108     Kindergeschirr „Playmobil“
• Lebensmittelecht 
• Spülmaschinengeeignet 
• Polypropylen 
• L x B: 42 x 29 cm
Ich habe jetzt den Bereich isolieren können und eine Schleife eingebaut.

Nun muss ich diese Einträge nur noch in ne csv mit 2 Spalten bekommen.
Aber ich denke bevor das passieren kann muss ich die Daten noch getrennt in ein Array bekommen, oder?

Danke
 
Nein, das kannst du wunderbar mit einem RegEx machen. Wie genau solls denn danach aussehen, dann entwerf ich dir mal einen und erklär ihn dir ;D
 
Da wäre cool.

Also um die Daten in die CSV zu gekommen brauche ich ein Array mit 2 greifbaren Blöcken.

array[0] sollte sein = Schale 66114

array[1] sollte sein =
Kindergeschirr „Playmobil“
• Lebensmittelecht
• Spülmaschinengeeignet
• Melamin
• Ø: 16 cm

Ich habe mir den RegExr angeschaut aber wie ich daraus ein Ergebniss bekommen,
habe ich irgendwie nicht verstanden. Danke
 
Sorry, hab am Wochenende meinen Geburtstag gefeiert ^^

Also wieso brauchst du denn unbedingt Arrays? Du kannst doch direkt ohne Arrays die CSV erstellen?
 
Erst mal meinen herzlichsten nachträglich....kein Problem :-)

Ja du hast vermulich recht aber dafür müsste ich erst mal deinen Weg sehen um zu verstehen das es auch ohne array geht..
 
Mir ist schon damals nicht klar gewesen, was deine genaue Frage ist. Vielleicht könntest du das noch mal ausformulieren zusammen mit dem Code, den du bislang hast.
 
PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1'); 


$dir = opendir("c:/xampp/htdocs/klemz/artikel/");

 while ($entry = readdir($dir)) 
 
 {
 

     $host = ("http://localhost/klemz/artikel/" . $entry . "");
    $filestring = file_get_contents($host);


    $startpos = 0;
    while($pos = strpos($filestring, '<td class="row1" align="left">', $startpos))


            {
                $string = substr($filestring, $pos, strpos($filestring, "</textarea>", $pos + 1) - $pos);
    
                                
                $data = strip_tags($string);
                
                echo '<pre>', $data, '</pre>';
                
                
        
            
            $startpos = $pos + 1;

            } 
 }

?>
Das Ergebnis sieht dann so aus:

HTML:
Schale 66114     Kindergeschirr „Playmobil“
• Lebensmittelecht 
• Spülmaschinengeeignet 
• Melamin 
• Ø: 16 cm

Trinkglas 66105     Kindergeschirr „Playmobil“
• Lebensmittelecht 
• Spülmaschinengeeignet 
• Acryl 
• Ø x H: 5 x 10,5 cm 
• 0,225 Liter

Platzset 66108     Kindergeschirr „Playmobil“
• Lebensmittelecht 
• Spülmaschinengeeignet 
• Polypropylen 
• L x B: 42 x 29 cm
Danke

Das ist mein letzter Stand, und anstelle diese Ergebnisse im echo anzuzeigen, möchte ich diese in eine CSV speichern.

CSV soll 2 Spalten haben und in der ersten Zalte sollen die einträge rein "Schale 66114 Kindergeschirr „Playmobil“"

und in die zweite Spalte "• Lebensmittelecht • Spülmaschinengeeignet • Melamin • Ø: 16 cm"

Ich hoffe ihr wisst jetzt was ich meine. Danke
 
PHP:
<?php

header('Content-Type: text/plain; charset=UTF-8');

$data = array(
    "Schale 66114     Kindergeschirr „Playmobil“
• Lebensmittelecht
• Spülmaschinengeeignet
• Melamin
• Ø: 16 cm",
    "Trinkglas 66105     Kindergeschirr „Playmobil“
• Lebensmittelecht
• Spülmaschinengeeignet
• Acryl
• Ø x H: 5 x 10,5 cm
• 0,225 Liter",
    "Platzset 66108     Kindergeschirr „Playmobil“
• Lebensmittelecht
• Spülmaschinengeeignet
• Polypropylen
• L x B: 42 x 29 cm"
);

$handle = fopen('php://output', 'w');

foreach ($data as $entry) {
    $tmp = explode("\n", $entry, 2);

    $tmp[0] = preg_replace('/\s+/', ' ', $tmp[0]);

    $tmp[1] = preg_replace('/(?:\r\n|\r|\n)/', ' ', $tmp[1]);
    $tmp[1] = preg_replace('/\s+/', ' ', $tmp[1]);

    fputcsv($handle, $tmp);
}

fclose($handle);
 
Super vielen Dank.

Du hast jetzt das Array als Textform eingefügt, nun hätte ich dieses ja gerne automatisch aus meinem Script generiert, wie setzte ich denn da jetzt die Trenner ein, oder habe ich dein Script jetzt falsch interpretiert?

PHP:
$dir = opendir("c:/xampp/htdocs/klemz/artikel/");

 while ($entry = readdir($dir)) 
 
 {
  header('Content-Type: text/plain; charset=UTF-8');

    $data = array( 

    $host = ("http://localhost/klemz/artikel/" . $entry . "");
    $filestring = file_get_contents($host);


    $startpos = 0;
    while($pos = strpos($filestring, '<td class="row1" align="left">', $startpos))


            {
                $string = substr($filestring, $pos, strpos($filestring, "</textarea>", $pos + 1) - $pos);
    
                                
                $data = strip_tags($string);
                
        
            
            $startpos = $pos + 1;

            } 
);

$handle = fopen('php://output', 'w');

foreach ($data as $entry) {
    $tmp = explode("\n", $entry, 2);

    $tmp[0] = preg_replace('/\s+/', ' ', $tmp[0]);

    $tmp[1] = preg_replace('/(?:\r\n|\r|\n)/', ' ', $tmp[1]);
    $tmp[1] = preg_replace('/\s+/', ' ', $tmp[1]);

    fputcsv($handle, $tmp);
} 

}

fclose($handle);
Danke.
 
Zuletzt bearbeitet:
So wahrscheinlich.

PHP:
<?php

error_reporting(E_ALL);
ini_set('display_errors', '1');

header('Content-Type: text/plain; charset=UTF-8');

$entries = array();

$dir = opendir("c:/xampp/htdocs/klemz/artikel/");

while ($entry = readdir($dir)) {
    $host = ("http://localhost/klemz/artikel/" . $entry . "");
    $filestring = file_get_contents($host);

    $startpos = 0;
    while ($pos = strpos($filestring, '<td class="row1" align="left">', $startpos)) {
        $string = substr($filestring, $pos, strpos($filestring, "</textarea>", $pos + 1) - $pos);

        $entries[] = strip_tags($string);

        $startpos = $pos + 1;
    }
}

$handle = fopen('php://output', 'w');

foreach ($entries as $entry) {
    $tmp = explode("\n", $entry, 2);

    $tmp[0] = preg_replace('/\s+/', ' ', $tmp[0]);

    $tmp[1] = preg_replace('/(?:\r\n|\r|\n)/', ' ', $tmp[1]);
    $tmp[1] = preg_replace('/\s+/', ' ', $tmp[1]);

    fputcsv($handle, $tmp);
}

fclose($handle);
 

Neueste Beiträge

Zurück
Oben