如何使用C++从网页获取文本

How to get text from a web page using C++?

本文关键字:获取 取文本 网页 何使用 C++      更新时间:2023-10-16

我正在尝试使用Poco从reddit的首页获取新闻。 我正在查看此pdf(http://pocoproject.org/slides/200-Network.pdf)以获取答案,但是在这一点上有点超出我的头,我不确定如何实现我的目标。 正如我所说,我试图简单地从 www.reddit.com 中获取新闻文章(特别是文章标题)。

到目前为止,我拥有的代码从reddit的首页抓取了所有html,并将其带到屏幕上:

#include <iostream>        
#include "Poco/Net/SocketAddress.h"
#include "Poco/Net/StreamSocket.h"
#include "Poco/Net/SocketStream.h"
#include "Poco/StreamCopier.h"
using namespace std;
using namespace Poco::Net;
using namespace Poco;
int main(int argc, char *argv[])
{   
    SocketAddress sa("www.reddit.com", 80);
    StreamSocket socket(sa);
    SocketStream str(socket);
    str << "GET / HTTP/1.1rn"
     "Host: www.reddit.comrn"
     "rn";
    str.flush();
    StreamCopier::copyStream(str, cout);
    system("PAUSE");
}

看看上面提到的pdf,看起来我的答案可能在某个地方,但我仍在学习计算机网络和互联网协议,所以在这一点上大部分都在我的头顶上。

主要问题:有人可以帮我弄清楚如何将文章标题从 www.reddit.com 变成字符串或字符串数组吗?

为什么不抢 http://www.reddit.com/.rss,它比html简单得多?例如,要使用qt框架获取新闻标题:

class Foo : public QObject { Q_OBJECT
public:
  Foo();
private slots:
  void got_it(QNetworkReply* reply);
private:
  QNetworkAccessManager* news_grabber;
};
Foo::Foo() {
  news_grabber = new QNetworkAccessManager(this);
  QObject::connect(news_grabber, SIGNAL(finished(QNetworkReply*)),
           this, SLOT(got_it(QNetworkReply*)));
  news_grabber->get(QNetworkRequest(QUrl("http://www.reddit.com/.rss")));
}
void Foo::got_it(QNetworkReply* reply) {
  QDomDocument document;
  std::vector<QString> items_storage;
  document.setContent(static_cast<QIODevice*>(reply));
  QDomNodeList items = document.elementsByTagName("item");
    for (int i = 0; i < items.length(); i++)
      items_storage.push_back(items.at(i).firstChildElement("title").text());
  }