Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Obtener datos de un .html c++

Estas en el tema de Obtener datos de un .html c++ en el foro de C/C++ en Foros del Web. hola buenos días/tardes/noches. No tengo mucha experiencia en c/c++ por eso he tomado la decisión de consultar con los maestros de esta pagina que tanto ...
  #1 (permalink)  
Antiguo 16/04/2015, 09:14
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 11 años, 10 meses
Puntos: 0
Exclamación Obtener datos de un .html c++

hola buenos días/tardes/noches. No tengo mucha experiencia en c/c++ por eso he tomado la decisión de consultar con los maestros de esta pagina que tanto me ha sido de utilidad; Procedo.

Estoy trabajando en Visual C++ 2012, y necesito que mi programa entre a una url y me guarde los datos que contiene la tabla en la url. Es un html sencillo, solo tiene la tabla y el titulo.

estoy creando un proyecto de consola, que entre, obtenga los datos de la tabla y los capture para luego exportarlos a un .xls o guardarlos en una DB.

He leído un poco, pero no me ha quedado claro ni como empezar a hacerlo. De antemano gracias por la ayuda y disculpen las molestias

una tabla como esta

<html>
<head><title>Ejemplo de tabla sencilla</title></head>
<body>

<h1>Listado de personas</h1>

<table>
<tr>
<td><strong>Nombre</strong></td>
<td><strong>Apellido</strong></td>
<td><strong>Cedula</strong></td>
</tr>

<tr>
<td>Rafael</td>
<td>Marquez</td>
<td>67891</td>
</tr>

<tr>
<td>Cecilio</td>
<td>Kinda</td>
<td>12345</td>
</tr>

<tr>
<td>Annaly</td>
<td>Figueroa</td>
<td>098612</td>
</tr>
</table>

</body>
</html>
  #2 (permalink)  
Antiguo 16/04/2015, 21:00
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Obtener datos de un .html c++

Si no te importa usar C++11 tienes a regex para buscar expresiones regulares.

un ejemplo que tuve trasteando en un ratico >_<:
Código C++:
Ver original
  1. // match_results::prefix/suffix
  2. // - using smatch, a standard alias of match_results<string::iterator>
  3. #include <iostream>
  4. #include <string>
  5. #include <regex>
  6. using namespace std;
  7.  
  8.  
  9. int main () {
  10.     std::string s ( "<td>Rafael</td>" ); //Supongamos que habiamos leido la linea "<td>Rafael</td>" del fichero. Seria librarse de las etiquetas de cierre y apertura para quedar solo con el nombre.
  11.     std::regex e ( "<td>" );             //buscamos lo que hay despues de <td> o sea: "Rafael</td>"
  12.     std::smatch m;                       //Aqui se guarda el "<td>" temporalmente
  13.    
  14.     std::cout << "Buscando lo que hay despues de <td> en la cadena \"" << s << "\"\n";
  15.     std::regex_search ( s, m, e );
  16.    
  17.     string nombre;
  18.     if ( m.ready() ) {
  19.         std::cout << m[0] << " found!\n"; //si se encuentra el <td> se guarda aqui -> m[0]
  20.         std::cout << "suffix: [" << (nombre = m.suffix()) << "]\n"; // Con esto sacamos lo que hay despues de </td> y lo guardamos en datos a la par que imprimimos tambien >_<
  21.        
  22.     }
  23.     //el string nombre ahora contiene todo el sufijo de <td> (la etiqueta de apertura) o sea "Rafael</td>". Tiene todo lo que viene despues de <td>
  24.     std::regex etiquetaCierre ( "\\b(</td>)([^ ]*)" );  //buscamos ahora por la etiqueta de cierre "</td>"
  25.     nombre = std::regex_replace ( nombre, etiquetaCierre, ""); // si la encuentra la sustituye por "" ¡NADA!
  26.    
  27.     std::cout << "Aqui tienes el nombre de la tabla: " << nombre << endl;
  28.    
  29.     //Es hacer lo mismo
  30.     return 0;
  31. }

Ahora si haces eso 2 lineas más tendrías "Marquez" y "67891".
Es leer una linea y pasarlo por el proceso que describí en el ejemplo.

Puede que haya alguna otra cosa mas fácil como un parseador(analizador) de HTML para C++, pero desconozco el tema.

Es seguir investigando.

Deberías leer cosas como Analizador Léxico, Analizador Sintáctico, Analizador Semántico Expresiones Regulares, analizador morfológico...

Muy interesante el tema =D

Suerte!
  #3 (permalink)  
Antiguo 20/04/2015, 10:18
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Obtener datos de un .html c++

Hola vangodp gracias por la respuesta. Efectivamente he leido sobre los parseadores y he encontrado una libreria llamada HtmlAgilityPack, la cual esta diseñada para lo que necesito. Gracias por el tip nuevamente
  #4 (permalink)  
Antiguo 20/04/2015, 13:22
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Obtener datos de un .html c++

Bueno... suerte =)

Etiquetas: html
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 13:35.