2010-02-01 14 views
16

Jak mam przeanalizować wszystkie właściwości "html" html tagów na stronie pełnej ZŁEGO html, w Qt?Najlepszy sposób na parsowanie HTML w Qt?

+1

Czy możesz dokładniej określić, co jest złego w HTML? Czy to źle, czy jest to kompletne śmieci? Nie możesz naprawić tego, co produkuje HTML? – Bill

+2

nie używaj wyrażenia regularnego ... http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Malfist

+1

To wyszukiwanie google, HTML Google'a jest okropny. Znaleziono błędy podczas sprawdzania tego dokumentu jako HTML5! Wynik: \t 50 błędów, 16 ostrzeżeń – y2k

Odpowiedz

18

Chciałbym użyć wbudowanego QtWebKit. Nie wiem jak to działa pod względem wydajności, ale myślę, że powinien złapać cały "zły" HTML. Coś jak:

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 
    } 
} 

użyć klasy

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

a następnie zrobić cokolwiek chcesz z kolekcji.

+1

Oczyściłem to i nie działało ... czy muszę czekać na załadowanie strony czy coś takiego? – y2k

+1

@JOSHUA: Zaleciłbym czekanie, aż otrzymasz sygnał LoadFinished (bool), tak. (http://doc.trolltech.com/4.6/qwebview.html#loadFinished) – Bill

6


to pytanie jest już dość stare. Niemniej jednak mam nadzieję, że to pomoże komuś:

Napisałem dwie małe klasy dla Qt, które opublikowałem pod sourceforge. Pomoże Ci to uzyskać dostęp do pliku html porównywalnego z XML.

Tutaj znajdziesz projektu:
http://sourceforge.net/projects/sgml-for-qt/
Tutaj znajdziesz help-system w wiki.

Drewle

Powiązane problemy