C++ 在Qt中解析HTML的最佳方法?

C++ 在Qt中解析HTML的最佳方法?,c++,html,qt,C++,Html,Qt,在Qt中,我如何解析一个页面上所有的“a”html标记“href”属性呢?我会使用内置的QtWebKit。我不知道它的性能如何,但我认为它应该能够捕获所有“糟糕”的HTML。 比如: class MyPageLoader : public QObject { Q_OBJECT public: MyPageLoader(); void loadPage(const QUrl&); public slots: void replyFinished(bool); priv

在Qt中,我如何解析一个页面上所有的“a”html标记“href”属性呢?

我会使用内置的QtWebKit。我不知道它的性能如何,但我认为它应该能够捕获所有“糟糕”的HTML。 比如:

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
  }
}
使用该类

MyPageLoader loader;
loader.loadPage("http://www.example.com")
然后对收藏做任何你喜欢的事。


这个问题已经很老了。尽管如此,我希望这将有助于某人:

我为Qt编写了两个小类,它们是在sourceforge下发布的。这将帮助您访问与XML使用的html文件

您可以在这里找到项目:

在这里,您可以在wiki中找到帮助系统。


Drewle

你能更具体地说明HTML的坏处吗?它是经常坏,还是完全是垃圾?您无法修复生成HTML的内容?不要使用正则表达式。。。这是谷歌搜索,谷歌的HTML很糟糕。将此文档作为HTML5检查时发现错误!结果:50个错误,16个警告@JOSHUA:这些错误阻止Qt使用QtWebKit解析HTML?我不知道如何使用QtWebKit来做这件事,唯一的答案显示它不起作用。。。我想页面必须加载还是怎么的?我把它清理干净了,它不工作了。。。我需要等待页面加载还是什么?@JOSHUA:我建议你等到加载完成(bool)信号,是的。()