Sto cercando di salvare alcune pagine Web in file di testo utilizzando script PHP.Come leggere una pagina Web in PHP
Come posso caricare una pagina Web in un buffer di file con PHP e rimuovere i tag HTML?
Sto cercando di salvare alcune pagine Web in file di testo utilizzando script PHP.Come leggere una pagina Web in PHP
Come posso caricare una pagina Web in un buffer di file con PHP e rimuovere i tag HTML?
fopen()
o file_get_contents()
l'URL: fopen("http://google.com/", "r")
http_get()
dal modulo di PHP http
fsockopen()
o stream_socket_client()
wget
o curl
attraverso system()
Nessuno di questi è garantito per essere disponibile sul tuo server però.
Un modo:
$url = "http://www.brothersoft.com/publisher/xtracomponents.html";
$page = file_get_contents($url);
$outfile = "xtracomponents.html";
file_put_contents($outfile, $page);
Il codice di cui sopra è solo un esempio e privo di qualsiasi controllo e la gestione degli errori (!).
Come le altre risposte hanno detto, le funzioni di streaming PHP standard o cURL sono la soluzione migliore per che richiama il codice HTML. Per quanto riguarda la rimozione dei tag, ecco un paio avvicina:
Opzione # 1: Utilizzare l'estensione Tidy, se disponibile sul server, a piedi attraverso l'albero del documento in modo ricorsivo e restituire il testo dai nodi. Qualcosa di simile a questo:
function textFromHtml(TidyNode $node) {
if ($node->isText()) {
return $node->value;
} else if ($node->hasChildren()) {
$childText = '';
foreach ($node->child as $child)
$childText .= textFromHtml($child);
return $childText;
}
return '';
}
Si potrebbe desiderare qualcosa di più sofisticato di quello, per esempio, che sostituisce <br />
tag (dove $node->name == 'br'
) con a capo, ma questo farà per un inizio.
Quindi, caricare il testo dell'HTML in un oggetto Tidy e chiamare la funzione sul nodo del corpo. Se si dispone il contenuto in una stringa, utilizzare:
$tidy = new tidy();
$tidy->parseString($contents);
$text = textFromHtml($tidy->body());
Opzione 2: utilizzare espressioni regolari per spogliano tutto tra <
e >
. Potresti (e probabilmente dovresti) sviluppare una regex più sofisticata che, ad esempio, corrisponda solo ai tag di inizio o fine HTML validi. Eventuali errori nella synax della pagina, come una parentesi angolare nel testo del corpo, potrebbero significare output spazzatura se non si presta attenzione. Questo è il motivo per cui Tidy è così bello (è specificamente progettato per ripulire le pagine non valide), ma potrebbe non essere disponibile.
Si consiglia vivamente di dare un'occhiata alla classe DOM SimpleHTML;
SimpleHTML DOM Parser at SourceForge
Con esso è possibile cercare l'albero DOM tramite selettori CSS come con la funzione $() di jQuery o prototypeJS $$() function.
Anche se funziona con file_get_contents() per ottenere il contenuto di una pagina web, è possibile passare solo HTML con un po 'di classe ricciolo di tuo (se si effettua il login, ecc)
+1 per la grande risposta! –
Non chiamerò in modo stupido l'uso di strumenti esterni –
@YourCommonSense Penso che la parte importante sia * chiamare uno strumento ** attraverso system() ***. Menziona anche la libreria cURL e la chiama "il modo intelligente". –