我试图解析一个html源代码。这是我尝试解析的网页 address 。我已经编写了下面的代码,但它在最后一步没有工作,我想要提取meta的内容:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QNetworkAccessManager manager;
QNetworkReply *reply = manager.get(QNetworkRequest(QUrl("https://www.instagram.com/p/BTwnRykl6EM/")));
QEventLoop event;
QObject::connect(reply, SIGNAL(finished()), &event, SLOT(quit()));
event.exec();
QString me = reply->readAll();
QString x;
//-------------------------------------------------------------------------------------------------------
//qDebug()<<me;
//-------------------------------------------------------------------------------------------------------
QXmlStreamReader reader(me);
if(reader.readNextStartElement()){
if(reader.name()=="html"){
while (reader.readNextStartElement()) {
if(reader.name()=="head"){
while (reader.readNextStartElement()) {
if(reader.name()=="meta" && reader.attributes().hasAttribute("property") && reader.attributes().value("property").toString()=="og:image")
x = reader.attributes().value("content").toString();
else{
qDebug()<<"why?";
reader.skipCurrentElement();
}
}
}
else
reader.skipCurrentElement();
}
}
else
reader.skipCurrentElement();
}
qDebug()<<x;
return 0;
}
这部分不起作用:
if(reader.name()=="meta" && reader.attributes().hasAttribute("property") && reader.attributes().value("property").toString()=="og:image")
x = reader.attributes().value("content").toString();
else{
qDebug()<<"why?";
reader.skipCurrentElement();
}
并打印
为什么?
我的代码出了什么问题?
答案 0 :(得分:1)
HTML不是有效的XML,因此您无法使用XML解析器。您可以找到HTML的选项on this wiki page。 不久,您可以使用Qt的Scribe框架或QtWebKit自动解析和呈现HTML,或使用外部库进行手动解析:
libxml2 和 libhtml 是C库, htmlcxx 是C ++库,允许构建dom-tree并迭代它。