我正在尝试使用 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/