我正在编写一个爬网应用程序。我在代码中的某个地方得到了:
//normally the HTML is obtained from web with QNetworkAccessManager & QNetworkReply:
//QString htmlCode = this->reply->readAll();
//exemplary test HTML
QString htmlCode =QString("<html><body><a href=\'foo.bar\'>test1</a><h2>test2<h2><a href=\"bar.foo \">test3</a></body></html>");
QWebPage page;
QWebFrame * frame = page.mainFrame(); //->setHtml(htmlCode);
frame->setHtml(htmlCode);
QWebElement document = frame->documentElement();
QWebElementCollection links = document.findAll("a");
foreach (QWebElement e, links) {
qDebug() << "exemplary link:" << e.toPlainText();
}
我确实意识到,这里有很多关于在qt中解析html的主题,但是我不知道,这里有什么问题...
最佳答案
嗯...我不确定setHtml()
是否可以完全同步工作,即我认为当时帧内容尚未完全解析,因此DOM内容尚不可用。
您应该尝试连接到无效的QWebFrame::loadFinished ( bool ok )
并在其中进行DOM爬网。
关于c++ - Qt HTML解析没有找到任何标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9666890/