2009-05-04 19 views
63

Deseo recuperar el código HTML de un enlace (página web) en PHP. Por ejemplo, si el enlace es¿Cómo obtengo el código HTML de una página web en PHP?

https://stackoverflow.com/questions/ask

entonces quiero el código HTML de la página que se sirve. Quiero recuperar este código HTML y almacenarlo en una variable de PHP.

¿Cómo puedo hacer esto?

+0

¿Puede explicarlo más? ¿Desea enviar una solicitud web a una URL determinada y leer la respuesta a una variable, supongo? –

+0

Sí, lo mismo que quiero, quiero que todo el código fuente aparezca en una variable devuelta por esa solicitud web. – Prashant

+1

Puede usar [esta herramienta] (http://codecanyon.net/item/javascript-web-scraper/8598806) para eliminar fácilmente html. –

Respuesta

94

Si su servidor PHP permite envolturas URL fopen entonces la forma más sencilla es:

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

Si necesita más control, entonces usted debe buscar en los cURL funciones:

$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

Me preocupa 404. ¿En caso de que el enlace no exista, entonces no quiero su contenido, en su lugar quiero mostrar un mensaje de error? ¿Cómo vamos a encontrar que la URL está dando error 404 o no (simplemente menas URL está funcionando o no)? – Prashant

+1

@Prashant: He editado para agregar una llamada curl_getinfo que le dará 200 o 404 o lo que sea – Greg

+0

También, ¿cómo es posible que PHP obtenga el HTML de la página actual? –

8

manera simple: Uso file_get_contents():

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

Tenga en cuenta que debe haber allow_url_fopentrue en que php.ini para poder utilizar envolturas fopen tipo URL.

forma más avanzada: Si no puede cambiar su configuración de PHP, es allow_url_fopenfalse por defecto y si se ha instalado ext/rizo, utilice el cURL library para conectarse a la página deseada.

10

Es posible que desee echa un vistazo a las bibliotecas YQL de Yahoo: http://developer.yahoo.com/yql

La tarea en cuestión es tan simple como

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

Puede probar esto en la consola en: http://developer.yahoo.com/yql/console (requiere inicio de sesión)

véase también Chris Heilmanns visualización de pantalla para algunas buenas ideas lo más que puede hacer: http://developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collating_distributed_information.html

17

Además, si desea manipular la página recuperada de alguna manera, es posible que desee probar algún analizador DOM de php. Encuentro PHP Simple HTML DOM Parser muy fácil de usar.

1

puede usar file_get_contents si quiere almacenar la fuente como variable, sin embargo curl es una práctica mejor.

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

esta solución mostrará la página web en su sitio. Sin embargo, curl es una mejor opción.

0

Aquí hay dos diferentes, formas sencillas de obtener el contenido de URL:

1) El primer método

Habilitar allow_url_include de su alojamiento (PHP.ini o en algún lugar)

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

o

2) el segundo método

Habilitar php_curl, php_imap y 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; 
?> 
Cuestiones relacionadas