如何解析html源代码

时间:2017-05-27 16:58:33

标签: html qt parsing xml-parsing qxmlstreamreader

我试图解析一个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();
}

并打印

  

为什么?

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

HTML不是有效的XML,因此您无法使用XML解析器。您可以找到HTML的选项on this wiki page。 不久,您可以使用Qt的Scribe框架或QtWebKit自动解析和呈现HTML,或使用外部库进行手动解析:

libxml2 libhtml 是C库, htmlcxx 是C ++库,允许构建dom-tree并迭代它。