Foro Black Hat SEO

Versión completa: Scrapear utilizando PHP nativo y la librería Curl
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Para sacar información de una web es muy sencillo, con los dos trozos de código que os voy a mostrar vas a poder hacerlo sin problemas.

Para el caso de utilizar las funciones nativas de PHP sería:

Código:
<?PHP
$html = file_get_contents('http://foroblackhat.com/');
preg_match('/<title>(.*)<\/title>/i', $html, $title);
$title_out = $title[1];

En este caso estamos sacado el Título de una URL que le hemos pasado la función file_get_contents que nos devuelve el HTML de esa URL.

Si quieres trabajar con una librería más potente te recomiendo Curl por defecto suele venir ya instalada. El código sería:

Código:
<?PHP
function get_content_url($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8');

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

$html = get_content_url('http://foroblackhat.com/');
preg_match('/<title>(.*)<\/title>/i', $html, $title);
$title_out = $title[1];

Como puedes ver en esta nos deja meter más parámetros como puede ser el User Agent y demás. Si quieres conocer todas las posibilidades de esta librería que es muy potente te recomiendo la web oficial de PHP:
http://www.php.net/manual/es/book.curl.php
Usa phpquery. Es el mejor para scrapear desde php... un saludo.

Enviado desde mi bq Aquaris
(29-07-2014, 12:24 AM)heyla03 escribió: [ -> ]Usa phpquery. Es el mejor para scrapear desde php... un saludo.

Muy interesante phpQuery, pero para obtener el HTML de una web es mejor emplear la librería cURL, el ejemplo del hilo hecho con phpQuery:

Código PHP:
<?PHP
function get_content_url($url) {
    
$ch curl_init();
    
curl_setopt($chCURLOPT_URL$url);
    
curl_setopt($chCURLOPT_HEADERfalse);
    
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    
curl_setopt($chCURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_1_1); 
    
curl_setopt($chCURLOPT_CONNECTTIMEOUT5);
    
curl_setopt($chCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8');

    
$data curl_exec($ch); 
    
curl_close($ch);

    return 
$data;
}

//Get the HTML string from cURL
$document_html_string file_get_contents('http://foroblackhat.com/');

//Create new instance of phpQuery
//We assume the phpoQuery library is included at the top or your script.
phpQuery::newDocument($document_html_string);
$inputs = array(); //Create an empty array to hold the inputs.
    
//Get title
$title_out $pq->find("title")->text(); 
Si yo lo obtengo con curl y con phpquery parseo lo que quiero extraer.

Enviado desde mi bq Aquaris
a mi no me llega a descargar el fichero de la web ¿???
¿Es posible navegar por una web con código PHP?

Me explico:

- Accedo a una web en la que hay un botón.
- Si pulso en ese botón, me lleva a una URL determinada (la URL cambia cada vez)

Esa URL última es la que quiero sacar, ¿sabéis cómo puedo hacerlo?
@pabl0p si lo que quieres tomar la última URL efectiva al seguir cierta URL que te lleva a otra URL se puede hacer con la opción CURLINFO_EFFECTIVE_URL

Te recomiendo mirarte la documentación de CURL:
http://php.net/manual/es/function.curl-getinfo.php

$ultimo_enlace = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
Vaya justo esto he andado buscando, yo lo hacía con el primer método y no funcionaba siempre porque las web lo bloqueaban, veremos que tal trabaja el segundo Gran sonrisa