Foro Black Hat SEOArchivo · solo lectura
RankHispano

¿Quieres que se conozca tu proyecto?

Da de alta gratis tu proyecto en menos
de un minuto gracias a la IA
en RankHispano.com

Scrapear utilizando PHP nativo y la librería Curl

Iniciado por Sauron · 19 mar 2014 · 7 respuestas · 15.162 visitas

  1. Sauron
    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:

    <?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:

    <?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
  2. heyla03
    Usa phpquery. Es el mejor para scrapear desde php... un saludo.

    Enviado desde mi bq Aquaris
  3. Sauron
    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:

    <?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;
    }
    
    //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();
  4. heyla03
    Si yo lo obtengo con curl y con phpquery parseo lo que quiero extraer.

    Enviado desde mi bq Aquaris
  5. vmartinez
    a mi no me llega a descargar el fichero de la web ¿???
  6. pabl0p
    ¿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?
  7. Sauron
    @"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);
  8. ErickGS
    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 :D

Este hilo pertenece al archivo del foro y ya no admite respuestas.

Otros hilos de esta sección