Parse die html-Tabelle mittels file_get_contents, php array
Ich versuche zu analysieren, die Tabelle hier in ein multi-dimensionales php-array. Ich bin mit dem folgenden code, der aber für einige Grund seiner Rückkehr ein leeres array. Nach der Suche rund um auf der web, ich fand diese Website das ist, wo ich bekam die parseTable () - Funktion aus. Vom Lesen der Kommentare auf dieser website, die ich sehen, dass die Funktion funktioniert perfekt. Also ich nehme an, es ist etwas falsch mit der Art und Weise bin ich immer der HTML-code von file_get_contents(). Irgendwelche Gedanken auf, was ich falsch mache?
<?php
$data = file_get_contents('http://flow935.com/playlist/flowhis.HTM');
function parseTable($html)
{
//Find the table
preg_match("/<table.*?>.*?<\/[\s]*table>/s", $html, $table_html);
//Get title for each row
preg_match_all("/<th.*?>(.*?)<\/[\s]*th>/", $table_html[0], $matches);
$row_headers = $matches[1];
//Iterate each row
preg_match_all("/<tr.*?>(.*?)<\/[\s]*tr>/s", $table_html[0], $matches);
$table = array();
foreach($matches[1] as $row_html)
{
preg_match_all("/<td.*?>(.*?)<\/[\s]*td>/", $row_html, $td_matches);
$row = array();
for($i=0; $i<count($td_matches[1]); $i++)
{
$td = strip_tags(html_entity_decode($td_matches[1][$i]));
$row[$row_headers[$i]] = $td;
}
if(count($row) > 0)
$table[] = $row;
}
return $table;
}
$output = parseTable($data);
print_r($output);
?>
Möchte ich meine Ausgabe-array wie folgt Aussehen:
1 --> 11:33AM --> DEV --> IN DER DUNKELHEIT 2 --> 11:29AM --> LIL' WAYNE --> SIE WIRD 3 --> 11:26 Uhr --> KARDINAL OFFISHALL --> NUMBA 1 (TIDE IS HIGH)
-1 für fehlende Anstrengung. Isolieren Sie Ihr problem, anstatt grundsätzlich die Entsendung einer riesigen block von code und Leute zu Fragen, um herauszufinden, was falsch ist und zu beheben.
InformationsquelleAutor Farhan Ahmad | 2011-11-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht lähmen sich selbst Parsen von HTML mit regexps! Lassen Sie stattdessen ein HTML-parser-Bibliothek Sorge über die Struktur des Markups für Sie.
Ich schlage vor, Sie prüfen, aus Einfachen HTML-DOM (http://simplehtmldom.sourceforge.net/). Es ist eine Bibliothek, die speziell geschrieben, um Hilfe bei der Lösung dieser Art von web-scraping-Probleme in PHP. Durch die Verwendung dieser Bibliothek, Sie können schreiben Sie Ihre Schaben in wesentlich weniger Zeilen Code, ohne sich Gedanken über das erstellen von regexps arbeiten.
Im Prinzip mit Einfachen HTML-DOM, Sie schreiben einfach etwas wie:
Diese werden dann erweitert, um erfassen Sie Ihre Daten in einem bestimmten format, beispielsweise um ein array erstellen, die der Künstler und entsprechende Titel wie:
Können wir sehen, dass dieser code (trivial) geändert, um neu formatieren die Daten in anderer Weise als gut.
Haben Sie sich beispielsweise "Schaben Slashdot!" aus dem simplehtmldom Website? Soweit ich es verstehe, die Antwort auf diese Frage.
Ok ich habe ein weiteres Beispiel, aber das ist so weit wie ich gehen werde. Ich lasse den rest für Sie um herauszufinden.
Ja, ich fand es heraus. Danke für das weitere Beispiel.
Mit simplehtmldom statt rexexps ist Spaß, nicht wahr? 🙂
InformationsquelleAutor jsalonen
Versuchte ich simple_html_dom aber bei größeren Dateien und wiederholen Sie die Aufrufe der Funktion bin ich immer zend_mm_heap_corrupted auf php 5.3 (GAH). Ich habe auch versucht, preg_match_all (aber auch dies wurde versagt auf eine größere Datei (5000) Zeilen html, die nur etwa 400 Zeilen meines HTML-Tabelle.
Ich bin mit diesem und seine Arbeit schnell und nicht spucken Fehler.
Dieser code funktionierte gut für mich.
Beispiel der original code ist hier.
http://techgossipz.blogspot.co.nz/2010/02/how-to-parse-html-using-dom-with-php.html
Sie tun sollten, array_shift($table) weil das erste element [0] => array(0) { } leer. es ist, weil Sie bekommen alle tr-tags in $rows stehen, einschließlich der mit th-tags. Ich schlage vor, eine Bearbeitung.
Ich bin mit DOM mit PHP 5.6.31, aber festgestellt, dass das Ergebnis
$rows = $tables->item(0)->getElementsByTagName('tr')
enthält keine<td>
tags für eine spätere$cols = $row->getElementsByTagName('td')
. Keine Ahnung warum mein Erster Anruf zugetElementsByTagName()
zu sein scheint Strippen die HTML-tags?InformationsquelleAutor John Ballinger