Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/04/2015, 21:00
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 3 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!