Domanda

ho estratto record da un database e li memorizzati su una pagina HTML con solo testo. Ogni record è memorizzato in un campo <p> paragrafo e separata da una <br /> interruzione di linea e una linea <hr>. Ad esempio:

Company Name<br/>
555-555-555<br />
Address Line 1<br />
Address Line 2<br />
Website: www.example.com<br />

Ho solo bisogno di inserire questi record in un file CSV. Ho usato fputcsv in combinazione con array () e file_get_contents (), ma leggere il mio l'intero codice sorgente della pagina web in un file .csv e un sacco di dati mancava pure. Questi sono più record memorizzati nello stesso formato. Così, dopo un intero blocco di record come visto sopra, è separata da un tag linea <hr>. Voglio leggere il nome della società nella colonna Nome, il numero di telefono nella colonna del telefono, gli indirizzi nella colonna Indirizzo e il sito web nella colonna Sito come illustrato di seguito.

http://i.stack.imgur.com/00Gxw.png
Come posso fare questo?

Snippet del HTML:

            1 Stop Signs<br />
            480-961-7446<br />
500 N. 56th Street<br />
        Chandler, AZ  85226<br />

<br />
                Website: www.1stopsigns.com<br />
            <br />
            </p><br /><hr><br />

E 'distanziati come questo nella fonte del HTML.

È stato utile?

Soluzione

Supponendo html quella mostrata sopra è ben formata, il mio approccio a questo problema deve essere in 2 fasi. Primo. Cancellare un po 'il testo HTML di essere più efficiente per esportare o gestire le informazioni. Qui cercare di cancellare gli elementi che si desidera salvare e cancellare quelli che sai che non si vuole richiedere nel prossimo futuro.

$html = preg_replace("|\s{2,}|si"," ",$html); // clear non neccesary spaces
$html = preg_replace("|\n{2,}|si","\n",$html); // convert more return line to only one
$html = preg_replace("|<br />|si","##",$html); // replace those tags with this one

Poi avrete un html più pulito per il lavoro con simile a questo ....

1 Stop Signs##
480-961-7446##
500 N. 56th Street##
Chandler, AZ  85226##
Website: www.1stopsigns.com##
##
</p>##<hr>##

Seconda. Ora è possibile esplodere i campi o fare un implodere in un valore separato da virgole per formare un csv

// here you'll have the fields to work with into the array called $csv_parts
$csv_parts = explode("##",$html);

// imploding, so there you have the formatted csv similar to 1 Stop Signs,480-961-7446,..
$csv = implode(",",$csv_parts);

Ora avrete un due modi di lavorare con il codice html per l'estrazione dei campi o esportare il CSV.


Spero che questo aiuta o vi darà un'idea di sviluppare ciò che è necessario.

Altri suggerimenti

Supponendo che i dati segue un modello in cui ogni record è separato da un tag <hr> ed ogni campo all'interno è separato da una <br /> allora si dovrebbe essere in grado di suddividere i dati.

Ci sono un sacco di modi per farlo, ma un modo ingenuo che lavoro potrebbe utilizzare explode() potrebbe essere qualcosa del tipo:

// open a file pointer to csv
$fp = fopen('records.csv', 'w');

// first, split each record into a separate array element
$records = explode('<hr>', $str);

// then iterate over this array
foreach ($records as $record) {

    // strip tags and trim enclosing whitespace
    $stripped = trim(strip_tags($record));

    // explode by end-of-line
    $fields = explode(PHP_EOL, $stripped);

    // array walk over each field and trim whitespace
    array_walk($fields, function(&$field) {
        $field = trim($field);
    });

    // create row
    $row = array(
        $fields[0], // name
        $fields[1], // phone
        sprintf('%s, %s', $fields[2], $fields[3]), // address
        $fields[6], // web
    );

    // write cleaned array of fields to csv
    fputcsv($fp, $row);
}

// done
fclose($fp);

Dove $str sono i dati pagina che stai analisi. Spero che questo aiuti.

Modifica

non ha notato i requisiti di campo specifico in origine. Aggiornato l'esempio.

Di gran lunga il modo più semplice sarebbe quella di prendere semplicemente il tutto blocco, goccia dal tag <hr> avanti poi dividere la stringa come un array di stringhe sui Tags <br />.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top