Foros del Web » Programando para Internet » PHP »

Extraer datos

Estas en el tema de Extraer datos en el foro de PHP en Foros del Web. Bien, puede que ya este explicado pero no lo e encontrado. El tema es que quisiera saber si se puede obtener datos de una web ...
  #1 (permalink)  
Antiguo 10/10/2011, 03:59
 
Fecha de Ingreso: agosto-2009
Mensajes: 30
Antigüedad: 15 años, 4 meses
Puntos: 2
Extraer datos

Bien, puede que ya este explicado pero no lo e encontrado. El tema es que quisiera saber si se puede obtener datos de una web mediante php.

Os pongo un ejemplo ya que es muy parecido de lo que yo quiero conseguir:

tengo esta pagina:
http://www.nomaskeine.com/estadisticas/puntos/25/mejores/jugadores

bien pues de cada jugador quiero conseguir en texto plano, o como sea, los puntos que tiene cada jugador, seria una cosa del tipo: Messi 50 y así con toda la lista.

Muchas gracias.
  #2 (permalink)  
Antiguo 10/10/2011, 04:08
 
Fecha de Ingreso: agosto-2011
Ubicación: España
Mensajes: 445
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: Extraer datos

Revisa este aporte: http://www.forosdelweb.com/f18/aport...equest-724214/ quizás te sirva.
  #3 (permalink)  
Antiguo 11/10/2011, 13:05
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 21 años
Puntos: 17
Respuesta: Extraer datos

Cita:
Iniciado por peya02 Ver Mensaje
Bien, puede que ya este explicado pero no lo e encontrado. El tema es que quisiera saber si se puede obtener datos de una web mediante php.

Os pongo un ejemplo ya que es muy parecido de lo que yo quiero conseguir:

tengo esta pagina:
http://www.nomaskeine.com/estadistic...ores/jugadores

bien pues de cada jugador quiero conseguir en texto plano, o como sea, los puntos que tiene cada jugador, seria una cosa del tipo: Messi 50 y así con toda la lista.

Muchas gracias.
Tal como te sugiere Arkaitz (en el enlace del post), hay muchos métodos para extraer datos de otro sitio desde PHP, es posible a través de las funciones nativas de PHP o utilizar la librería CURL (especial cuando debemos almacenar la cookie, hacer POST, etc.).

Como lo que requieres es sencillo, es posible solo con un GET y una expresión regular para obtener los datos que quieres (si deseas evitar las expresiones regulares, puedes usar la librería DOM para acceder a los elementos HTML).

Código PHP:
<?php
//example by deerme.org xD
$players = array();
$content file_get_contents("http://www.nomaskeine.com/estadisticas/puntos/25/mejores/jugadores");
if (  
preg_match_all('|<tr class="odd"><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td> </tr>|'$content $matchs  )  )
{
        foreach( 
$matchs[0] as $k => $v )
        {
                
$players[] = array(
                        
"name" => trim(strip_tags($matchs[2][$k])),
                        
"points" => trim($matchs[4][$k]),
                        
"position" => trim($matchs[1][$k]),
                        
"team" => trim(strip_tags($matchs[3][$k]))
                );
        }

}
print_r($players);
Y la salida es
Código:
Array
(
    [0] => Array
        (
            [name] => Cesc Fàbregas
            [points] => 62
            [position] => Centrocampista
            [team] => Barcelona
        )

    [1] => Array
        (
            [name] => Messi
            [points] => 60
            [position] => Delantero
            [team] => Barcelona
        )

    [2] => Array
        (
            [name] => Soldado
            [points] => 47
            [position] => Delantero
            [team] => Valencia
        )

    [3] => Array
        (
            [name] => Roberto Jiménez
            [points] => 44
            [position] => Portero
            [team] => Zaragoza
        )
...
Saludos
  #4 (permalink)  
Antiguo 11/10/2011, 13:44
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: Extraer datos

Bueno en estos casos es mucho mejor usar clase DOMDocument, varios expertos recomiendan no usar expresiones regulares. Dejo un ejemplo sencillo:

Código PHP:
Ver original
  1. <?php
  2. $players = array();
  3. $content = file_get_contents(
  4. "http://www.nomaskeine.com/estadisticas/puntos/25/mejores/jugadores");
  5. $doc = new DOMDocument();
  6. $doc->loadHTML($content);
  7. $xpath = new DOMXPath($doc);
  8. $row = $xpath->query('//table/tbody//tr');
  9.  
  10. foreach ($row as $r) {
  11.     $col = $r->getElementsByTagName('td');
  12.     $players[] = array(
  13.                 "position" => $col->item(0)->nodeValue,
  14.                 "name" => $col->item(1)->nodeValue,
  15.                 "team" => $col->item(2)->nodeValue,
  16.                 "points" => $col->item(3)->nodeValue,
  17.                 "price" => $col->item(4)->nodeValue,
  18.                 "efficiency" => $col->item(5)->nodeValue
  19.     );
  20. }
  21.  
  22. echo '<pre>';
  23. print_r($players);
  24. echo '</pre>';

Cita:
Resultado:

Array
(
[0] => Array
(
[position] => Centrocampista
[name] => Cesc Fàbregas
[team] => Barcelona
[points] => 62
[price] => 23.440.000
[efficiency] => 0.2645
)

[1] => Array
(
[position] => Delantero
[name] => Cristiano Ronaldo
[team] => Real Madrid
[points] => 61
[price] => 31.210.000
[efficiency] => 0.1955
)

[2] => Array
(
[position] => Delantero
[name] => Messi
[team] => Barcelona
[points] => 60
[price] => 27.750.000
[efficiency] => 0.2162
)

... ... ...
)
Nota: es posible que se pueda simplificar más. Cualquier duda la respondo en el tema.

Un aporte para aprender:

http://www.forosdelweb.com/f18/aport...ml-dom-792348/
http://php.net/manual/es/class.domdocument.php

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 13/10/2011, 02:58
 
Fecha de Ingreso: agosto-2009
Mensajes: 30
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Extraer datos

muchas gracias a todos, poco a poco voy conociendo mas el tema.

Etiquetas: domdocument, domxpath, expresion, externos, file_get_contents, información-externa, regular
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 00:01.