2009-05-04 17 views
63

Voglio recuperare il codice HTML di un collegamento (pagina web) in PHP. Ad esempio, se il collegamento èCome posso ottenere il codice HTML di una pagina Web in PHP?

https://stackoverflow.com/questions/ask

poi voglio il codice HTML della pagina che viene servito. Voglio recuperare questo codice HTML e memorizzarlo in una variabile PHP.

Come posso fare questo?

+0

Potete spiegarlo meglio. Vuoi inviare una richiesta web a un determinato URL e leggere la risposta a una variabile? –

+0

Sì, la stessa cosa che voglio, voglio l'intero codice sorgente in una variabile restituita da quella richiesta web. – Prashant

+1

È possibile utilizzare [questo strumento] (http://codecanyon.net/item/javascript-web-scraper/8598806) per rimuovere facilmente l'html. –

risposta

94

Se il server PHP permette wrapper URL fopen quindi il modo più semplice è:

$html = file_get_contents('http://stackoverflow.com/questions/ask'); 

Se avete bisogno di un maggiore controllo, allora si dovrebbe guardare ai cURL funzioni:

$c = curl_init('http://stackoverflow.com/questions/ask'); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, true); 
//curl_setopt(... other options you want...) 

$html = curl_exec($c); 

if (curl_error($c)) 
    die(curl_error($c)); 

// Get the status code 
$status = curl_getinfo($c, CURLINFO_HTTP_CODE); 

curl_close($c); 
+0

Sono preoccupato per 404. Nel caso in cui il collegamento non esiste, quindi non voglio il suo contenuto, invece voglio visualizzare un messaggio di errore ?? Come scopriremo che l'url sta dando errore 404 o meno (semplicemente l'URL di menas funziona o meno)? – Prashant

+1

@Prashant: ho modificato per aggiungere una chiamata a curl_getinfo che ti darà 200 o 404 o qualsiasi altra cosa – Greg

+0

Inoltre, come è possibile che PHP ottenga la pagina HTML corrente? –

8

modo semplice: Uso file_get_contents():

$page = file_get_contents('http://stackoverflow.com/questions/ask'); 

prega di notare che allow_url_fopen deve essere true in voi php.ini per essere in grado di utilizzare i wrapper URL per fopen.

Altro modo avanzato: Se non è possibile modificare la configurazione di PHP, allow_url_fopen è false di default e se è installato ext/ricciolo, utilizzare il cURL library per la connessione alla pagina desiderata.

10

Si consiglia di controllare le librerie YQL da Yahoo: http://developer.yahoo.com/yql

Il compito a portata di mano è semplice come

select * from html where url = 'http://stackoverflow.com/questions/ask' 

Si può provare questo fuori nella console a: http://developer.yahoo.com/yql/console (richiede login)

vedere anche Chris Heilmanns screencast per alcune buone idee che altro si può fare: http://developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collating_distributed_information.html

17

Inoltre, se si desidera manipolare la pagina recuperata in qualche modo, si potrebbe voler provare un parser DOM php. Trovo che lo sia molto facile da usare.

1

è possibile utilizzare file_get_contents se si desidera archiviare l'origine come variabile, tuttavia l'arricciatura è un valore migliore.

$url = file_get_contents('http://example.com'); 
echo $url; 

questa soluzione mostrerà la pagina web sul tuo sito. Tuttavia arricciatura è un'opzione migliore.

0

Ecco due diversi, semplici modi per ottenere contenuti da URL:

1) Il primo metodo

Abilita allow_url_include dal tuo hosting (PHP.ini o da qualche parte)

<?php 
$variableee = readfile("http://example.com/"); 
echo $variableee; 
?> 

o

2) il secondo metodo

Abilita php_curl, php_imap e php_openssl

<?php 
// you can add anoother curl options too 
// see here - http://php.net/manual/en/function.curl-setopt.php 
function get_dataa($url) { 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 

$variableee = get_dataa('http://example.com'); 
echo $variableee; 
?> 
Problemi correlati