c++ - 如何使用 C++ 从网页中获取文本?

标签 c++ html string sockets poco

我正在尝试使用 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.1\r\n"
     "Host: www.reddit.com\r\n"
     "\r\n";
    str.flush();

    StreamCopier::copyStream(str, cout);

    system("PAUSE");
}

查看上面提到的 pdf,看起来我的答案可能在某处,但我仍在学习计算机网络和互联网协议(protocol),所以此时大部分内容都超出了我的理解范围。

主要问题:有人能帮我弄清楚如何将来自 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());
  }

关于c++ - 如何使用 C++ 从网页中获取文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21962185/

相关文章:

c++ - 除以 2 和 Sigsegv 错误时位移位的奇怪行为

c++ - Sum 帮助程序无法上课

c++ - Direct3D 9 阴影贴图混合模式

android - 不同移动设备屏幕上游戏的纵横比

c++ - 以多态方式捕获异常

python - "ImportError: cannot import name Browser"与 python Mechanize

html - 为什么对象边距是基于绝对父级而不是直接相对父级应用的

c - 在C语言中,如何在单独的变量中使用多个字符串

javascript - string.split() 的正则表达式,用于在 url 上拆分字符串

javascript - 将单词(字符串)数组转换为正则表达式并使用它来匹配字符串