Foros del Web » Programando para Internet » PHP »

Extracción de datos de colegio oficial médicos barcelona

Estas en el tema de Extracción de datos de colegio oficial médicos barcelona en el foro de PHP en Foros del Web. Buenos días, Necesitaría sacar de unas tablas con id determinado de cada tabla la información que hay en cada celda parta luego guardarla en una ...
  #1 (permalink)  
Antiguo 22/01/2014, 08:18
 
Fecha de Ingreso: enero-2014
Mensajes: 10
Antigüedad: 9 años, 10 meses
Puntos: 0
Extracción de datos de colegio oficial médicos barcelona

Buenos días, Necesitaría sacar de unas tablas con id determinado de cada tabla la información que hay en cada celda parta luego guardarla en una base de datos mysql, el ejemplo de las tablas de las que queremos recuperar la información sería la siguiente:

Código HTML:
<table class="taula" id="nombre" cellspacing="0">
<tbody><tr>
<td>Nom:</td><td>APELLIDO APELLIDO, NOMBRE NOMBRE</td>
</tr><tr>
<td>Número:</td><td>123456789</td>
</tr><tr>
<td>&nbsp;</td><td>EXERCENT</td>
</tr>
</tbody></table>
<table class="taula" rules="rows" id="especialidad" border="1" cellspacing="0">
<tbody><tr>
<td>AL•LERGOLOGIA</td>
</tr><tr>
<td>MEDICINA INTERNA</td>
</tr>
</tbody></table>
<table class="taula" rules="rows" id="direccion" border="1" cellspacing="0">
<tbody><tr>
<th scope="col">Adreça</th><th scope="col">CP</th><th scope="col">Comarca</th><th scope="col">Població</th><th scope="col">Telèfon</th><th scope="col">Correu electrònic</th>
</tr><tr>
<td>PG.DE GRACIA, 1, 1-2</td><td>08007</td><td>
<span id="cosArea_cosInterior_DLAdress_lbl1_0">BARCELONES </span>
</td><td>
<span id="cosArea_cosInterior_DLAdress_lbl2_0">BARCELONA</span>
</td><td>9312345678</td><td>
<img id="cosArea_cosInterior_DLAdress_Image1_0" src="../../../handler/ImgMail.ashx?E=nPMG%2boWcZZKnSZ2Ftr8IT2BLFJFVlbRkGKkFc1nQHzs%3d&amp;D=TGdqLLHnEsULuXqwFZbOTPuwzDLtVw26DSCtLyw4ukk%3d">
</td>
</tr><tr>
<td>DOS DE MAIG, 1-3, BXS-1 </td><td>08912</td><td>
<span id="cosArea_cosInterior_DLAdress_lbl1_1">BARCELONES </span>
</td><td>
<span id="cosArea_cosInterior_DLAdress_lbl2_1">BADALONA</span>
</td><td>9312345678</td><td>
<img id="cosArea_cosInterior_DLAdress_Image1_1" src="../../../handler/ImgMail.ashx?E=&amp;D=">
</td>
</tr>
</tbody></table> 
Lo que tengo que extraer de la primera tabla, denominada id="nombre", sería el APELLIDO APELLIDO, NOMBRE NOMBRE completo y el número que aparece 123456789 y el dato que aparece EXERCENT, En esta tabla sólo existirá un registro, de nombre, un registro del número y un registro de estado.

Lo que necesito recuperar de la segunda tabla id="especialidad", es la especialidad, aquí puede que haya un registro o varios, como es este el caso, que hay dos registro, uno de que AL•LERGOLOGIA, y otro que es MEDICINA INTERNA, pero pueden haber más, como máximo cuatro o cinto.

Lo que tengo que extraer de la tercera tabla que es id="dirección" es el nombre de la calle, el cod postal, la población, la provincia, el teléfono, y ya está la imagen del siguiente td no la necesito. En este caso al igual que en el anterior, existe la posibilidad de que hayan dos filas o tres filas de datos, en la mayoría sólo tendrán una única fila.

He intentado hacer un bucle con foreach para recorrer todas las celdas y sacar los datos de las mismas, y pasar los datos a un formulario para acabar de rellenar el dato correo electrónico que es un dato que tenemos que introducir a mano, pero no sé que hacer cuando existen varias direcciones y varias especialidades.

Podrías ayudarme?
  #2 (permalink)  
Antiguo 22/01/2014, 08:54
 
Fecha de Ingreso: diciembre-2005
Mensajes: 65
Antigüedad: 18 años
Puntos: 4
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Necesitas hacer un pequeño parser . Hay múltiples formas de hacerlo o incluso puedes usar una librería para eso. Si lo haces a mano puedes hacerlo de una manera más o menos formal o de manera informal para salir del paso. Lo primero que tienes que pensar son las estructuras de datos que vas a utilizar para almacenar la información y luego la estructura de las tablas en la BD. Aunque podrías pasarlo directamente a la BD. Una vez que lo has pensado, parseas el documento por ejemplo usando expresiones regulares para localizar cada uno de los elementos... Te tienes que hacer un pequeño programilla que vaya localizando cada cosa y la vaya almacenando en las estructuras de datos o en la BD.
  #3 (permalink)  
Antiguo 22/01/2014, 09:24
 
Fecha de Ingreso: enero-2014
Mensajes: 10
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Cita:
Iniciado por piwy Ver Mensaje
Necesitas hacer un pequeño parser . Hay múltiples formas de hacerlo o incluso puedes usar una librería para eso. Si lo haces a mano puedes hacerlo de una manera más o menos formal o de manera informal para salir del paso. Lo primero que tienes que pensar son las estructuras de datos que vas a utilizar para almacenar la información y luego la estructura de las tablas en la BD. Aunque podrías pasarlo directamente a la BD. Una vez que lo has pensado, parseas el documento por ejemplo usando expresiones regulares para localizar cada uno de los elementos... Te tienes que hacer un pequeño programilla que vaya localizando cada cosa y la vaya almacenando en las estructuras de datos o en la BD.
Tienes alguna sugerencia de por donde empezar?, ya he intentado recorrer todos los td's por medio de un foreach pero no sé que hacer a partir de ahí puedo recoger los datos por medio el bucle pero no sé cómo introducirlo en la base de datos.
  #4 (permalink)  
Antiguo 22/01/2014, 09:28
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 3 meses
Puntos: 397
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Puedes usar DOMDocument para que sea mas fácil obtener los datos del sitio

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #5 (permalink)  
Antiguo 22/01/2014, 09:40
 
Fecha de Ingreso: enero-2014
Mensajes: 10
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Cita:
Iniciado por jonni09lo Ver Mensaje
Puedes usar [URL="http://www.php.net/manual/es/domdocument.loadhtml.php"]DOMDocument[/URL] para que sea mas fácil obtener los datos del sitio

Saludos
Tengo hecho esto y funciona sólo con los primeros resultados, pero cuando tengo dos filas de datos ejemplo dirección tengo que introducirlo a mano

Código PHP:
<?php 
$enlace 
$_POST['enlace'];

echo 
'<p>El enlace seleccionado es ' .$enlace'</p>'

$searchURL $enlace;
$html file_get_contents($searchURL);

$patternform '/(<table.*<\/table>)/sm';
preg_match_all($patternform ,$html,$matches);

echo 
$matches[0][0];
//echo '<br />';
$doc = new DOMDocument();
@
$doc->loadHTML($html); //cargamos el HTML
$Nombre $doc->getElementById('cosArea_cosInterior_DadesCol');
$td $Nombre->getElementsByTagName('td');
 
foreach (
$td as $clave=>$data) {
    if (
$clave == && $data != ''){
            
$nombre $data->nodeValue;
        
//echo '<br>' .utf8_decode($nombre). '<br>';
    
}
    if (
$clave == && $data != ''){
            
$colegiado $data->nodeValue;
        
//echo '<br>' .$colegiado. '<br>';
    
}
    
    
//echo utf8_decode($data->nodeValue . '<br />');
}
    
//echo '<br /->ESPECIALIDADES<br /->';
$Especialidad $doc->getElementById('cosArea_cosInterior_DLEspec');
$td $Especialidad->getElementsByTagName('td');

foreach (
$td as $clave=>$data) {
    if (
$data != ''){
            
$especialidades $data->nodeValue;
            
$especialidades trim($especialidades'; ');
        
//echo '<br>' .utf8_decode($especialidades);
    
}
    
//echo utf8_decode($data->nodeValue . ';');
}

//echo '<br /->CONTACTO CUATRO <br><br> '; 
$contacto $doc->getElementById('cosArea_cosInterior_DLAdress');
$td $contacto->getElementsByTagName('td');
//$cadena= array($dirección, $cod_postal, $pobalcion, $provincia, $telefono);

// DIRECCIÓN //
foreach ($td as $clave=>$data) {
    
    
    if (
$clave == && $data != ' '){
            
$direccion $data->nodeValue;
            echo 
'<br>' .$clave" " .$direccion;
    }

    if (
$clave == && $data != ' ') {
            
$codpostal $data->nodeValue;
        echo 
'<br>' .$codpostal;
    }

    if (
$clave == && $data != ' ') {
            
$poblacion $data->nodeValue;
            
$poblacion trim($poblacion);
        echo 
'<br>' .$poblacion;
    }
    
    if (
$clave == && $data != ' ') {
        
$provincia $data->nodeValue;
        
$provincia trim($provincia);
        echo 
'<br>' .$provincia;
    }
    
// TELÉFONO Y EMAIL //    
    
if ($clave == 4) {
        
$telf $data->nodeValue;
        echo 
'<br>' .$telf;
    }
    if (
$clave == 5) {
        
$email $data->nodeValue;
        if (
$email false){
            echo 
"no existe e-mail";
        }else{
        echo 
'<br>' .$clave." ".$email;
    }
    }
    
//echo '<br><div id='.$clave.'>' .$clave. ": " .$data->nodeValue. '</div>';
}
?>

<? echo "DATOS MEDICO ";?>
<form action="InsertarDatoscomb.php" method="post">
<table width="90%" border="0">
  <tr>
    <td colspan="2"></td>
  </tr>
  <tr>
    <td width="27%">Nombre</td>
    <td width="73%"><label for="Nombre"></label>
      <input name="Nombre" type="text" id="Nombre" value="<?php echo utf8_decode($nombre); ?>" size="50"></td>
  </tr>
  <tr>
    <td>Colegiado</td>
    <td><label for="Colegiado"></label>
      <input name="Colegiado" type="text" id="Colegiado" value="<?php echo $colegiado?>" size="25"></td>
  </tr>
  <tr>
    <td>Especialidades</td>
    <td><label for="Especialidad"></label>
      <input name="Especialidad" type="text" id="Especialidad" value="<?php echo utf8_decode($especialidades);?>" size="75"></td>
  </tr>
  <tr>
    <td>Dirección</td>
    <td><label for="Direccion"></label>
      <input name="Direccion" type="text" id="Direccion" value="<?php echo utf8_decode($direccion);?>" size="75"></td>
  </tr>
  <tr>
    <td>Cod. postal</td>
    <td><label for="CodPostal"></label>
      <input name="CodPostal" type="text" id="CodPostal" value="<?php echo $codpostal;?>"></td>
  </tr>
  <tr>
    <td>Población</td>
    <td><label for="Poblacion"></label>
      <input name="Poblacion" type="text" id="Poblacion" value="<?php echo utf8_decode($poblacion);?>" size="50"></td>
  </tr>
  <tr>
    <td>Provincia</td>
    <td><label for="Provincia"></label>
      <input name="Provincia" type="text" id="Provincia" value="<?php echo utf8_decode($provincia); ?>" size="50"></td>
  </tr>
  <tr>
    <td colspan="2"><input type="submit" id="adddireccion2" value="añadir sergunda direccion" class="adddireccion2" /><div id="direccion2"></div></td>
    </tr>
  <tr>
    <td>Telf</td>
    <td><label for="Telefono"></label>
      <input name="Telefono" type="text" id="Telefono" value="<?php echo $telf;?>" size="75"></td>
  </tr>
  <tr>
    <td>Email</td>
    <td><label for="email"></label>
      <input type="text" name="email" id="email"></td>
  </tr>
  <tr>
    <td>Fecha</td>
    <td><label for="fecha"></label>
      <input name="fecha" type="text" id="fecha" value="<?php echo date('d/m/y');?>"/></td>
  </tr>
  <tr>
    <td>Hora</td>
    <td><label for="hora"></label>
      <input name="hora" type="text" id="hora" value="<?php echo date('H:i:s');?>" /></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input name="Enviar" type="submit" id="Enviar" value="Guardar registro" /></td>
  </tr>
</table>
</form>
La verdad es que el DOMDocument no lo he conseguido hacer funcionar, llevo ya 13 días con el tema y no salgo adelante
  #6 (permalink)  
Antiguo 22/01/2014, 09:47
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 4 meses
Puntos: 165
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Creo recordar que Symfony 2 trae un crawler que te puede ayudar

http://symfony.com/doc/current/compo...m_crawler.html

saludos
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #7 (permalink)  
Antiguo 22/01/2014, 09:55
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 3 meses
Puntos: 397
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Cita:
Iniciado por miktrv Ver Mensaje
Creo recordar que Symfony 2 trae un crawler que te puede ayudar

http://symfony.com/doc/current/compo...m_crawler.html

saludos
Es realmente necesario usar un framework para hacer algo como ello? te daría el apoyo si el que pregunta usara Symfony pero no es el caso (puede que me equivoque y tengas poderes telepáticos, en cuyo caso sería genial ya que acertarías con la solución de una, que conste que no lo digo en mala onda)

@construmet4 y si en vez de iterar sobre los td, iteras sobre los tr?

Digo ya que si el numero de td pueden variar, trabajar desde los tr sería mucho mas sencillo

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #8 (permalink)  
Antiguo 22/01/2014, 10:02
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 4 meses
Puntos: 165
Respuesta: Extracción de datos de colegio oficial médicos barcelona

emm.. jonni09lo, porque usar el framework completo si tienes esa librería? precisamente una de las ventajas de Symfony 2 es que te permite usar sus librerías sin tener que usar el framework por completo.
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #9 (permalink)  
Antiguo 22/01/2014, 10:03
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 3 meses
Puntos: 397
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Cita:
Iniciado por miktrv Ver Mensaje
emm.. jonni09lo, porque usar el framework completo si tienes esa librería? precisamente una de las ventajas de Symfony 2 es que te permite usar sus librerías sin tener que usar el framework por completo.
Bueno con ese argumento me has convencido

Aunque independientemente de lo que use, creo que debe de definir la lógica de como quiere obtener los datos.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #10 (permalink)  
Antiguo 22/01/2014, 10:17
 
Fecha de Ingreso: enero-2014
Mensajes: 10
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Cita:
Iniciado por jonni09lo Ver Mensaje
Es realmente necesario usar un framework para hacer algo como ello? te daría el apoyo si el que pregunta usara Symfony pero no es el caso (puede que me equivoque y tengas poderes telepáticos, en cuyo caso sería genial ya que acertarías con la solución de una, que conste que no lo digo en mala onda)

@construmet4 y si en vez de iterar sobre los td, iteras sobre los tr?

Digo ya que si el numero de td pueden variar, trabajar desde los tr sería mucho mas sencillo

Saludos
Pero lo que neceisto recuperar son los datos que hay dentro de los td por separado, ¿podría hacer eso si trabajo con los tr?
  #11 (permalink)  
Antiguo 22/01/2014, 10:19
 
Fecha de Ingreso: enero-2014
Mensajes: 10
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Estoy muy perdido la verdad, ya no sé por donde salir, creo que no me queda mucho, pero la verdad es que me está costando un montón,
  #12 (permalink)  
Antiguo 22/01/2014, 10:41
 
Fecha de Ingreso: enero-2014
Mensajes: 10
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Cita:
Iniciado por jonni09lo Ver Mensaje
Bueno con ese argumento me has convencido

Aunque independientemente de lo que use, creo que debe de definir la lógica de como quiere obtener los datos.

Saludos
Lo que necesito es almacenar los datos recogidos en 3 tablas, unidas entre ellas por el número de identificación que aparece en la tabla id="nombre", en una tabla quiero guardar el nombre completo, y el número de identificación y el estado, EXERCENT O NO EXCERCENT, en otro tabla, quiero guardar la especialidad, añadiendo a la misma el número de identificación de la primera tabla, quiero guardar en una tercera tabla, la dirección completa, el cod. postal, población y provincia y el número de identificación de la primera tabla y por último quiesiera guardar en la última tabla, teléfono y e-mail con el número de identificación de la primera tabla

Me podéis hechar una mano?
  #13 (permalink)  
Antiguo 22/01/2014, 10:44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 65
Antigüedad: 18 años
Puntos: 4
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Pues parece sencillo de narices. Lo que pasa que yo no escribo código porque me lleva mucho tiempo y con escribir algún comentario creo que ya hago bastante . Yo eso lo plantearía usando un bucle para las direcciones y las almacenaría en objetos o en un array de estructuras. El total de los datos en una estructura o en un objeto y luego a la BD con dos tablas una para los datos principales y otra para las direcciones.
  #14 (permalink)  
Antiguo 22/01/2014, 10:47
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 4 meses
Puntos: 165
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Simplemente tienes que recorrer lo nodos que necesites con el crawler. Montate un fichero sencillo y poco a poco modificalo adaptándolo al caso real.

saluds
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #15 (permalink)  
Antiguo 22/01/2014, 11:43
 
Fecha de Ingreso: enero-2014
Mensajes: 10
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Cita:
Iniciado por piwy Ver Mensaje
Pues parece sencillo de narices. Lo que pasa que yo no escribo código porque me lleva mucho tiempo y con escribir algún comentario creo que ya hago bastante . Yo eso lo plantearía usando un bucle para las direcciones y las almacenaría en objetos o en un array de estructuras. El total de los datos en una estructura o en un objeto y luego a la BD con dos tablas una para los datos principales y otra para las direcciones.
El bucle ya lo he hecho con foreach y me da los datos que existen en la table en el todos los td's, siempre serán igual, 5 columnas en el caso de la dirección, 1 columna en el caso de especialidad, pero no sé cómo almacenar los objetos para luego enviarlos a la BD. ¿Podrías ayudarme? o ¿dirigirme donde encuentre la forma de hacerlo?
  #16 (permalink)  
Antiguo 22/01/2014, 11:45
 
Fecha de Ingreso: enero-2014
Mensajes: 10
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Cita:
Iniciado por miktrv Ver Mensaje
Simplemente tienes que recorrer lo nodos que necesites con el crawler. Montate un fichero sencillo y poco a poco modificalo adaptándolo al caso real.

saluds
La verdad es que no sé muy bien como funciona este sistema, pero me imagino que es similar a lo que he intentado con el foreach que he hecho, el problema es que no sé cómo manipular los resultados de este bucle
  #17 (permalink)  
Antiguo 22/01/2014, 13:29
 
Fecha de Ingreso: enero-2014
Mensajes: 10
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Cita:
Iniciado por jonni09lo Ver Mensaje
Es realmente necesario usar un framework para hacer algo como ello? te daría el apoyo si el que pregunta usara Symfony pero no es el caso (puede que me equivoque y tengas poderes telepáticos, en cuyo caso sería genial ya que acertarías con la solución de una, que conste que no lo digo en mala onda)

@construmet4 y si en vez de iterar sobre los td, iteras sobre los tr?

Digo ya que si el numero de td pueden variar, trabajar desde los tr sería mucho mas sencillo

Saludos
Hola, el número de td varía ya que se añaden nuevas tr que es lo que realmente varia, cada fila siempre tendrá el mísmo número de td como máximo.
Yo saco todas las td's con el foreach, pero lo que no sé es como añadir el resultado a variables para poderlas pasar a la base de datos, cada 5 td es una tr de mi base de datos, pero si el origen tiene dos tr, serán 10 td las que tengan y necesito motarlas de forma que pueda trabajar con 5 y 5 y así subirlas a mi tabla de mysql. No sé si me puedes ayudar
  #18 (permalink)  
Antiguo 22/01/2014, 14:01
 
Fecha de Ingreso: diciembre-2005
Mensajes: 65
Antigüedad: 18 años
Puntos: 4
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Necesitas dos tablas una con los datos principales y otra con las direcciones para esos datos principales.
  #19 (permalink)  
Antiguo 23/01/2014, 03:01
 
Fecha de Ingreso: enero-2014
Mensajes: 10
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Extracción de datos de colegio oficial médicos barcelona

Cita:
Iniciado por piwy Ver Mensaje
Necesitas dos tablas una con los datos principales y otra con las direcciones para esos datos principales.
Ya tengo distribuida las tablas de la siguiente manera:

tabla principal: nombre, identificación, estado, id
tabla especialidad: identificación, especialidad, id
tabla dirección: identificación, dirección, codpostal, población, provincia, id
tabla contacto: identificación, telf, email, id

Todas las tablas se han de combinar por medio del campo identificacion, el ide es méramente para darle un registro único dentro de la tabla.

El problema es cómo pasar por medio de php el resultado que me arroja el bucle foreach que realizo a las tablas, ya que eso no sé cómo manipularlo ya que no es una array ¿Me puedes ayudar?

Etiquetas: barcelona, colegio, extracción, formulario, mysql, oficial, registro, tabla
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




La zona horaria es GMT -6. Ahora son las 20:41.