[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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

como los permalinks tienen los nombres de las entradas:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
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
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
le voy a echar un vistazo. Muchas gracias máquina, te debo una!  ;D

Avisa si te funciona :D

Saludos.



No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
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)

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
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.