Perfekt wäre ein FilesystemIterator mit einem foreach (), statt einem while().
Ankündigung
Einklappen
Keine Ankündigung bisher.
500 html Seiten durchsuchen
Einklappen
Neue Werbung 2019
Einklappen
X
-
[URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].
-
Moin,
das nächste mal bitte gleich am Anfang ein genaues Muster der html Datei zeigen, dann kann man dir auch schnell helfen. Kann ja niemand wissen, dass mehrere Firmen in einer Datei sind.
Das Skript musst du jetzt eben auf alle Seiten loslassen und irgendwas mit den Daten anfangen. Also in eine Datenbank speichern, ausgeben oder was auch immer. Wie du das genau machst, kann ich dir nicht sagen, weil ich nicht weiß wie deine Datei-Struktur aussieht. Suche einfach mal nach "php glob" oder "php FilesystemIterator". (siehe Antwort von tr0y)
Naja egal, habe das Script entsprechend angepasst:
PHP-Code:<?php
//Get plain text from within element defined by $class from HTML $file. Replace content of $replace by | for separation and strip html tags
function getTextFromHtml($file, $class, array $replace)
{
//Load html from within element $class
$dom = new DomDocument();
$dom->loadHTMLFile($file);
$find = new DomXPath($dom);
$nodes = $find->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $class ')]");
$tmp_dom = new DOMDocument();
foreach ($nodes as $node)
{
$tmp_dom->appendChild($tmp_dom->importNode($node,true));
}
$html.=trim($tmp_dom->saveHTML());
//separate multiple companies in one document
$html_part = str_replace(array('<div class="'.$class.'">', '<div class="'.$class.'">'), '$$', $html);
//replace for separation and strip html tags
$text = strip_tags(str_replace($replace, '|', $html_part));
//return plain text with | separator
return $text;
}
//build multidimensional array from different companies
function getArray($string)
{
//separate companies
$company_arrays = array_values(array_filter(array_map('trim',explode("$$", $string))));
//separate data of every company
foreach($company_arrays as $company_array)
{
$data[] = array_values(array_filter(array_map('trim',explode("|", str_replace('$$', '', $company_array)))));
}
return $data;
}
//get arrays of data for all companies
$address_data_array = getArray(getTextFromHtml('test.html', 'address-info', array('<br>')));
$company_data_array = getArray(getTextFromHtml('test.html', 'col-md-8 info-table', array('<td>', '</td>')));
//build associative array from fetched data
$index = 0;
foreach($address_data_array as $address_data)
{
$output[] = array('name' => $address_data[0], 'street' => $address_data[1], 'city' => $address_data[2], 'email' => $company_data_array[$index][1], 'url' => $company_data_array[$index][3], 'fax' => $company_data_array[$index][5], 'hotline' => $company_data_array[$index][7]);
$index++;
}
echo "<pre>";
print_r($output);
echo "</pre>";
- 1 Likes
Kommentar
Kommentar