[SOLUCIONADO] Ayuda programando un spider.

Iniciado por ToracosLabs, Enero 05, 2016, 10:41:21 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Enero 05, 2016, 10:41:21 AM Ultima modificación: Enero 05, 2016, 01:10:45 PM por blackdrake
 Saludos, estoy programando un script en php para poder extraer todos los libros de la web You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

como los permalinks tienen los nombres de las entradas:

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

se me ha ocurrido cambiar el ultimo número que es el ID del libro, ej:

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

en el navegador funciona pero a la hora de hacer un file_get_contents() no funciona.

Por favor necesito ayuda. Gracias y disculpen las molestias!

Enero 05, 2016, 12:32:54 PM #1 Ultima modificación: Enero 05, 2016, 12:35:52 PM por blackdrake
Es bastante raro lo que te ocurre, probé también con un simple script en curl y tampoco funciona, pero por suerte, después de mucho intentarlo, pude hacerlo funcionar :D

Código: php
<?php
//Script adaptado para recoger información de todos los libros de casadellibro.com.
//By blackdrake

//Id del libro
$id = "2193770";

//Recogemos los datos de ese libro
$datos = recoger_web('http://www.casadellibro.com/libro-el-ultimo-caton/9788408083450/'.$id);     

//Mostramos la pagina
echo $datos;


//Obtenemos los datos de la web

function recoger_web($url) {
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, $url);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0");
    curl_setopt($c, CURLOPT_MAXREDIRS, 10);
    $follow_allowed = ( ini_get('open_basedir') || ini_get('safe_mode')) ? false : true;
   
if ($follow_allowed) {
        curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
    }
curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 9);
    curl_setopt($c, CURLOPT_REFERER, $url);
    curl_setopt($c, CURLOPT_TIMEOUT, 60);
    curl_setopt($c, CURLOPT_AUTOREFERER, true);
    curl_setopt($c, CURLOPT_ENCODING, 'gzip,deflate');

    $data = curl_exec($c);
    $status = curl_getinfo($c);
    curl_close($c);
 
    if ($status['http_code'] == 200) {
        return $data;
    }

elseif ($status['http_code'] == 301 || $status['http_code'] == 302) {
        if (!$follow_allowed) {
            if (empty($redirURL)) {
                if (!empty($status['redirect_url'])) {
                    $redirURL = $status['redirect_url'];
                }
            } if (empty($redirURL)) {
                preg_match('/(Location:|URI:)(.*?)(\r|\n)/si', $data, $m);
                if (!empty($m[2])) {
                    $redirURL = $m[2];
                }
            } if (empty($redirURL)) {
                preg_match('/href\=\"(.*?)\"(.*?)here\<\/a\>/si', $data, $m);
                if (!empty($m[1])) {
                    $redirURL = $m[1];
                }
            } if (!empty($redirURL)) {
                $t = debug_backtrace();
                return call_user_func($t[0]["function"], trim($redirURL), $post_paramtrs);
            }
        }
    }
return "Error en la url: $url!!<br/><br/> Petición enviada<b/>:<br/>" . json_encode($status) . "<br/><br/>Web capturada (con el error):$data";
}


Saludos




Enero 05, 2016, 12:36:01 PM #2 Ultima modificación: Enero 05, 2016, 12:36:49 PM por blackdrake
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Es bastante raro lo que te ocurre, probé también con un simple script en curl y tampoco funciona, pero por suerte, después de mucho intentarlo, pude hacerlo funcionar :D

Código: php
<?php
//Script adaptado para recoger información de todos los libros de casadellibro.com.
//By blackdrake

//Id del libro
$id = "2193770";

//Recogemos los datos de ese libro
$datos = recoger_web('http://www.casadellibro.com/libro-el-ultimo-caton/9788408083450/'.$id);     

//Mostramos la pagina
echo $datos;


//Obtenemos los datos de la web

function recoger_web($url) {
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, $url);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0");
    curl_setopt($c, CURLOPT_MAXREDIRS, 10);
    $follow_allowed = ( ini_get('open_basedir') || ini_get('safe_mode')) ? false : true;
   
if ($follow_allowed) {
        curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
    }
curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 9);
    curl_setopt($c, CURLOPT_REFERER, $url);
    curl_setopt($c, CURLOPT_TIMEOUT, 60);
    curl_setopt($c, CURLOPT_AUTOREFERER, true);
    curl_setopt($c, CURLOPT_ENCODING, 'gzip,deflate');

    $data = curl_exec($c);
    $status = curl_getinfo($c);
    curl_close($c);
   
    if ($status['http_code'] == 200) {
        return $data;
    }

elseif ($status['http_code'] == 301 || $status['http_code'] == 302) {
        if (!$follow_allowed) {
            if (empty($redirURL)) {
                if (!empty($status['redirect_url'])) {
                    $redirURL = $status['redirect_url'];
                }
            } if (empty($redirURL)) {
                preg_match('/(Location:|URI:)(.*?)(\r|\n)/si', $data, $m);
                if (!empty($m[2])) {
                    $redirURL = $m[2];
                }
            } if (empty($redirURL)) {
                preg_match('/href\=\"(.*?)\"(.*?)here\<\/a\>/si', $data, $m);
                if (!empty($m[1])) {
                    $redirURL = $m[1];
                }
            } if (!empty($redirURL)) {
                $t = debug_backtrace();
                return call_user_func($t[0]["function"], trim($redirURL), $post_paramtrs);
            }
        }
    }
return "Error en la url: $url!!<br/><br/> Petición enviada<b/>:<br/>" . json_encode($status) . "<br/><br/>Web capturada (con el error):$data";
}


Saludos

le voy a echar un vistazo. Muchas gracias máquina, te debo una!  ;D

Enero 05, 2016, 12:37:11 PM #3 Ultima modificación: Enero 05, 2016, 12:39:48 PM por blackdrake
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
le voy a echar un vistazo. Muchas gracias máquina, te debo una!  ;D

Avisa si te funciona :D

Saludos.



You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
le voy a echar un vistazo. Muchas gracias máquina, te debo una!  ;D

Avisa si te funciona :D

Saludos.

Perfectamente, ahora un for y para la base de datos!  8)

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
le voy a echar un vistazo. Muchas gracias máquina, te debo una!  ;D

Avisa si te funciona :D

Saludos.

Perfectamente, ahora un for y para la base de datos!  8)

Perfecto, doy el tema como solucionado, cualquier cosa, vuelves a postear :D

Saludos.