【问题标题】:how to parse an html source code如何解析html源代码
【发布时间】:2017-05-27 16:58:32
【问题描述】:

我正在尝试解析 html 源代码。这是我正在尝试解析的网页 address。我已经编写了下面的代码,但是在我想提取元内容的最后一步它不起作用:

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();
}

并打印

为什么?

我的代码有什么问题?

【问题讨论】:

  • 该页面是 HTML 格式,但您正尝试使用 XML 解析器来解析它——不行,这是两种不同的格式。
  • 那么我应该为 html 使用什么库呢? @MrEricSir

标签: html qt parsing xml-parsing qxmlstreamreader


【解决方案1】:

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

libxml2libhtml 是 C 库,htmlcxx 是 C++ 库,允许构建 dom-tree 并对其进行迭代。

【讨论】:

  • 将链接中的基本前提添加到答案中,以防链接过时。
  • @ShivaniKatukota,感谢您的建议。我在答案中添加了更多信息
最近更新 更多