2010-02-01 17 views
16

¿Cómo voy a analizar todas las propiedades "href" de las etiquetas html "a" en una página llena de BAD html, en Qt?¿La mejor manera de analizar HTML en Qt?

+1

¿Puede ser más específico acerca de lo que es malo sobre el HTML? ¿Es malo regularmente o es basura completa? No puedes arreglar lo que está produciendo el HTML? – Bill

+2

no utilizan expresiones regulares ... http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Malfist

+1

Es una búsqueda en Google, HTML de Google es terrible. ¡Se han encontrado errores al verificar este documento como HTML5! Resultado: \t 50 errores, 16 advertencia (es) – y2k

Respuesta

18

Utilizaría el QtWebKit incorporado. No sé cómo funciona en términos de rendimiento, pero creo que debería capturar todo el HTML "malo". Algo así como:

class MyPageLoader : public QObject 
{ 
    Q_OBJECT 

public: 
    MyPageLoader(); 
    void loadPage(const QUrl&); 

public slots: 
    void replyFinished(bool); 

private: 
    QWebView* m_view; 
}; 

MyPageLoader::MyPageLoader() 
{ 
    m_view = new QWebView(); 

    connect(m_view, SIGNAL(loadFinished(bool)), 
      this, SLOT(replyFinished(bool))); 
} 

void MyPageLoader::loadPage(const QUrl& url) 
{ 
    m_view->load(url); 
} 

void MyPageLoader::replyFinished(bool ok) 
{ 
    QWebElementCollection elements = m_view->page()->mainFrame()->findAllElements("a"); 

    foreach (QWebElement e, elements) { 
    // Process element e 
    } 
} 

utilizar la clase

MyPageLoader loader; 
loader.loadPage("http://www.example.com") 

y luego hacer lo que quiera con la colección.

+1

Lo limpié y no funcionó ... ¿tengo que esperar a que se cargue la página o algo así? – y2k

+1

@JOSHUA: Recomiendo esperar hasta que obtenga la señal loadFinished (bool), sí. (http://doc.trolltech.com/4.6/qwebview.html#loadFinished) – Bill

6


esta cuestión ya es bastante antiguo. Sin embargo, espero que esto ayude a alguien:

Escribí dos clases pequeñas para Qt que publiqué en sourceforge. Esto te ayudará a acceder a un archivo html comparable al que usas con XML.

Aquí encontrará el proyecto:
http://sourceforge.net/projects/sgml-for-qt/
Aquí encontrará un sistema de ayuda en el wiki.

Drewle

Cuestiones relacionadas