Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/01/2013, 17:54
Avatar de Dundee
Dundee
 
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Respuesta: Extraer página con CURL y recuperar datos de tabla

Cita:
Iniciado por andresdzphp Ver Mensaje

Código PHP:
Ver original
  1. $doc = new DOMDocument();
  2. $doc->loadHTML($html); //cargamos el HTML
  3. $td = $doc->getElementsByTagName('td');
  4.  
  5. foreach ($td as $data) {
  6.     echo $data->nodeValue . '<br />';
  7. }

Pero se puede ser más preciso si hay un div u otra etiqueta donde se encuentre la tabla.

Saludos.
Gracias , tus sugerencias me han servido bastante, ya he conseguido sustraer los datos que necesitaba de la primera página e insertarlos en la base de datos, pero lo que no consigo acceder es a los enlaces de paginación , para así visitar las otras páginas (ya que esta paginada), y así poder hacer lo mismo. Otra forma de hacerlo es con un bucle FOR añadiéndole el número de página como una variable, algo así:
$url=$url.'?cuerpo=I590&especialidad=004&inicio='. $pagina; , pero no me funciona , y creo que puede ser porque al hacer el for en y meter dentro la llamada CURL , le vuelvo a pasar por POST los datos iniciales , que además en esta ocasión se los paso por GET , ¿puede ser eso o que necesito modificar para poder ver el resto de páginas?.

El código que tengo (esto es para solo la primera página):
Código:
set_time_limit(0);
//require("simple_html_dom.php");
$pagina=1;
$url='http://www.miweb.es/lista.html';

     echo $url.'<br />';

    //$pagina=$pagina+50;
    
    $ch = curl_init($url);//URL A ENVIAR EL CONTENIDO
  
        curl_setopt ($ch, CURLOPT_POST, 1);//SETEAMOS LA VARIABLE DE ENVIAR DE CONTENIDO POST EN TRUE (1)
        curl_setopt ($ch, CURLOPT_POSTFIELDS, 'cuerpo=I590&especialidad=004'); //SETEAMOS LOS VALORES A ENVIAR
   
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);//OPCIONAL: NO RETORNARA EL RESULTADO DE LA OPERACION
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies/cookies-ja.txt");
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies/cookies-ja.txtt");
   
    $html = curl_exec ($ch);//EJECUTAMOS
    curl_close ($ch);//CERRAMOS

    if (!$html) {
        echo "<br />cURL error number:" .curl_errno($ch);
        echo "<br />cURL error:" . curl_error($ch);
        exit;
    }

$doc = new DOMDocument();
$doc->loadHTML($html); //cargamos el HTML
$td = $doc->getElementsByTagName('td');
$paginacion=$doc->getElementById('paginacion');


var_dump($paginacion->tagName);

$cliente=array();
foreach ($td as $data) {
    
    echo $data->nodeValue . '<br />';
    if (strlen($data->nodeValue)===8){
        $cliente['dni']= $data->nodeValue;
    }elseif(strpos($data->nodeValue,',')){
        $cliente['name']=$data->nodeValue;

    if(!add_user($cliente)){
        echo "No se ha podido insertar el interino con DNI ".$cliente['dni']."<br />";
    }
    unset($cliente);
    $cliente=array();
    }

}
Seguro que existen mejores formas de hacerlo, pero para lo que lo necesito funciona perfectamente (ojo solo para la primera página, no como me gustaría con todas las páginas).

Gracias de antemano.
__________________
Videotutoriales de Drupal