Estrazione dati da file.html

Ariswan

Nuovo Utente
8 Mar 2012
11
0
0
Un saluto generale, seguo Mr. Webmaster da un bel po' ma adesso mi sono registrato per farmi aiutare un po'.

Ho un problema e non riesco a venirne a capo da un paio di giorni :dipser:
Ho salvato il sorgente di questa pagina, tramite libreria cURL, in un file.html e poiché m'interessa solo una porzione di tutto l'html, nello specifico solo la tabella con i voli con tutti i dati al suo interno, non so come sviluppare lo script per fare ciò e quindi eliminare tutto il resto del codice che non m'interessa.
Mi serve perché poi devo scrivere un altro script che elabora i dati, secondo un particolare ragionamento, e poi li invia ad un server.

Ho perso giorni a cercare di capire se usare le espressioni regolari (mai usate e complicatissime) o altre funzioni ma ciò che ho trovato su internet è dispersivo e poco adatto al mio caso e purtroppo il mio php è un po' limitato così come il mio inglese :(
Ovviamente non vi chiedo di sviluppare il codice per me (così vi prendete tutto il divertimento, ah!), mi serve solo qualche piccolo consiglio da qualcuno più esperto di me.

Spero possiate aiutarmi, ringrazio in anticipo :D
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
puo provare a fare così (ma non giuro che funzi)
PHP:
<?php
//..........
//se i tuoi dati sono racchiusi in una tabella <table>.....</table>
//con il seguente pattern dovresti leggerne il contenuto
$pattern = "#\<table\>(.*?)\</table\>#si";
preg_match($pattern,$pagina,$matches);
$result = isset($matches[0]) ? $matches[0] : '';
//............
?>
se non funzia spera in qualcuno più esoerto di me
 

Ariswan

Nuovo Utente
8 Mar 2012
11
0
0
Ti ringrazio :)
fortunatamente ho risolto in un altro modo, con la funzione substr: impostando il numero di caratteri da saltare all'inizio e quelli da eliminare alla fine, sono riuscito ad isolare la tabella che mi serve.

Questo è il risultato e credo che possa andare bene.

Adesso, dovrei estrarre i dati uno per uno per elaborarli, trasformare ogni stringa in array suppongo.. Quel che serve a me è: estrarre i voli provenienti da Fiumicino e Malpensa e salvarli se hanno subito un ritardo superiore alle 3 ore, o se sono stati cancellati.
Ecco, questo non so proprio come farlo :(

Magari date un'occhiata al sorgente con firebug, nel tbody di <table class="TableOrari"> ci sono: <tr class="table_head"> con l'indice dei dati: Compagnia, numero volo, provenienza, orario pianificato, orario stimato e infine le note, nel quale viene scritto se il volo è stato cancellato oppure se è atterrato.
Successivamente ci sono i dati veri e propri e sono quelli che devo estrarre ed elaborare: <tr class="bg_voli1"> con i vari td class, logo, nVolo, provenienza, schedulato, stimato e note..

Boh, sto impazzendo
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
puoi provare una cosa del genere, guarda però che è un'idea comunque da perfezionare
lascio i vari var_dump per vedere come si trasforma il testo da passaggio a passaggio (lo vedi meglio poi anche con visualizza sorgente)

PHP:
<?php
//questo per simulare il file di testo
$pagina=<<< EOD
<table>
<tr>
<td class="provenienza">VERONA<div></div></td>
<td class="schedulato">11:15</td>
<td class="stimato">10:45</td>
<td class="note">ATTERRATO</td>
</tr>
<tr>
<td class="provenienza">VENEZIA<div></div></td>
<td class="schedulato">12:15</td>
<td class="stimato">15:45</td>
<td class="note">SCHEDULATO</td>
</tr>
</table>
EOD;
var_dump($pagina);echo "<br>";
$pagina=strip_tags($pagina, "<td>");//elimino tutti i tag escluso i <td>
var_dump($pagina);echo "<br>";
$pagina=trim(str_replace("<td class=\"provenienza\">","|",$pagina));//divido per provenienza con |
var_dump($pagina);echo "<br>";
$piu_pagine=explode("|",$pagina);
var_dump($piu_pagine);echo "<br>";
unset($piu_pagine[0]);
var_dump($piu_pagine);echo "<br><br>";
$da_sostituire=array("<td class=\"schedulato\">","<td class=\"stimato\">","<td class=\"note\">");
foreach($piu_pagine as $valore){
	var_dump($valore);echo "<br>";
	$transito=trim(str_replace($da_sostituire,"|",$valore));
	$dato_parziale[]=trim(str_replace("</td>","",$transito));
}
var_dump($dato_parziale);echo "<br>";
foreach($dato_parziale as $valore){
	$divido_il_dato=explode("|",$valore);
	$chiave=trim($divido_il_dato[0]);
	$dato_finale[$chiave][0]=trim($divido_il_dato[1]);
	$dato_finale[$chiave][1]=trim($divido_il_dato[2]);
	$dato_finale[$chiave][2]=trim($divido_il_dato[3]);
}
var_dump($dato_finale);echo " array finale<br>";
/*in questo caso ti ritrovi con un array chiamato $dato_finale composto da
$dato_finale["VERONA"][0] = 11:15
$dato_finale["VERONA"][1] = 10:45
$dato_finale["VERONA"][2] = ATTERRATO
*/
//se poi vuoi utilizzare solo i dati es. di Verona
foreach($dato_finale as $chiave => $valore){
	if($chiave !="VERONA"){//se la chiave non è verona
		unset($dato_finale[$chiave]); //elimini
	}
}
?>
come detto arrivi a ottenere un array con chiave nome della città poi con quello fai ciò che vuoi
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
24
Roma
alessandro1997.netsons.org
Soluzione più elegante con i componenti di Symfony (http://www.symfony.com):
PHP:
<?php

use Symfony\Component\DomCrawler\Crawler;

$voli = array();

$crawler = new Crawler(file_get_contents('data.html'));

$crawler   = $crawler->filter('tr.bg_voli1, tr.bg_voli2 ');
$nodeCount = $crawler->count();

$loghi       = $crawler->filter('td.logo > img')->extract('src');
$numeri      = $crawler->filter('td.nVolo')->extract('_text');
$provenienze = $crawler->filter('td.provenienza')->extract('_text');
$schedulati  = $crawler->filter('td.schedulato')->extract('_text');
$stimati     = $crawler->filter('td.stimato')->extract('_text');
$note        = $crawler->filter('td.note')->extract('_text');

$voli = array();

for ($i = 0; $i <= $nodeCount; $i++) {
    $voli[] = array(
        'logo'        => $loghi[$i],
        'numero'      => $numeri[$i],
        'provenienza' => $provenienze[$i],
        'schedulato'  => $schedulati[$i],
        'stimato'     => $stimati[$i],
        'note'        => $note[$i],
    );
}

print_r($voli);
Ovviamente prima dovrai installare le librerie DomCrawler e CssSelector.
 

Ariswan

Nuovo Utente
8 Mar 2012
11
0
0
Non ho mai usato qualcosa del genere, sembra interessante; ti ringrazio per la dritta, e anche per il codice xD

One moment, metti caso che non dovessi utilizzarlo solo in locale questo framework e relative librerie, posso utilizzarlo su un server per un sito web?
 
Ultima modifica:

Ariswan

Nuovo Utente
8 Mar 2012
11
0
0
Ti ringrazio, in generale mi hai detto tutto ciò che devo sapere. Se non riesco apro un thread
 
Discussioni simili
Autore Titolo Forum Risposte Data
E Progressbar estrazione dati da tabella mySQL Ajax 9
L Estrazione dati php Database 6
L Estrazione dati casuali non doppioni MySQL 1
D Chiave unica in estrazione dati da array php PHP 0
ronny1710 Estrazione Dati Tessera Sanitaria .NET Framework 1
creatorweb [PHP] estrazione ciclica dati con 2 dati alla volta PHP 2
Gigi87 [PHP] Estrazione dati da forum o da social network PHP 1
L estrazione dati da mysql in php e salvataggio in cartella del server PHP 51
E [PHP] estrazione dati in modo non continuativo PHP 1
C Estrazione Dati da Pagine Gialle PHP 0
A Estrazione dati da tabella sql MySQL 27
T Codice per estrazione dati da db PHP 4
L estrazione dati per login PHP 0
W Estrazione dati da DB PHP 20
L Estrazione dati per settimana. PHP 13
L estrazione dati e immagini in contemporanea PHP 4
M estrazione dati casuali da database Database 0
C [PHP][MY SQL] - Estrazione dati database tramite form PHP 8
G estrazione dati da DB tramite PHP errore time out PHP 2
B Estrazione dati utente loggato MySQL 1
W Estrazione dati DB da lista MySQL 1
M Connessione Database ed estrazione dati Javascript 6
A [risolto] Istruzione per estrazione di dati casuali dal db PHP 25
B Estrazione dati Classic ASP 3
U Estrazione dati da un db con un menu selezione in cascata PHP 6
Sargon estrazione dati PHP 17
G estrazione dati da xml ed inserimento in db PHP 0
P Menu a discesa con estrazione dati da datbase mysql PHP 21
M problema con estrazione dati da più tabelle MySQL 1
A problema: estrazione dati da query mysql e assegnazione ad una variabile PHP 2
L Estrazione dati PHP 32
M caratteri speciali ed estrazione dati Database 4
L Estrazione dati da 2 tabelle non relazionate Classic ASP 26
R Aiuto estrazione dati Database 0
G estrazione dati da più record in un solo nuovo campo Database 0
E Difficile estrazione dati da tabella PHP 3
L Estrazione valori max su più campi MySQL 4
M [PHP] Estrazione random con nomi presi dal db PHP 22
gandalf1959 Estrazione e visualizzazione del simbolo dell'euro php/mysqli PHP 0
F Estrazione Email di persone selezionate e attive / facebook + invio di massa! Annunci servizi di Social Media Marketing 0
V Estrazione di una singola banda da file multi banda (RGB) con Python Programmazione 0
O [PHP] problema estrazione immagine da db PHP 12
V [PHP] Estrazione con SQL PHP 1
M [MS Access] Estrazione record multipli MS Access 1
S [PHP] estrazione dal DB complicata PHP 7
asevenx [Javascript] Estrazione dal database di un valore in base ad una scelta Javascript 7
S Php e mysql, estrazione da una tabella e inserimento in un'altra tabella PHP 14
P Probelma estrazione stringa PHP 5
L Estrazione Articoli Random da Tabella senza doppioni PHP 1
gandalf1959 Estrazione di un singolo dato da una ricerca mysql PHP 1

Discussioni simili