我想要得到的字符串,它比我能分析它网页数据。我没有发现qwebview,qurl和其他任何方法。你可以帮帮我吗?的Linux,C ++,Qt的。

修改

感谢您的帮助。代码工作,但下载后,有些页面已经打破字符集。 我想这样的事情来修复它:

QNetworkRequest *request = new QNetworkRequest(QUrl("http://ru.wiktionary.org/wiki/bovo"));

request->setRawHeader( "User-Agent", "Mozilla/5.0 (X11; U; Linux i686 (x86_64); "
                       "en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1" );
request->setRawHeader( "Accept-Charset", "win1251,utf-8;q=0.7,*;q=0.7" );
request->setRawHeader( "charset", "utf-8" );
request->setRawHeader( "Connection", "keep-alive" );

manager->get(*request);

任何结果=(。

有帮助吗?

解决方案

你有没有看着 QNetworkAccessManager ?这里的一个粗略的样品示出的使用:

class MyClass : public QObject
{
Q_OBJECT

public:
    MyClass();
    void fetch(); 

public slots:
    void replyFinished(QNetworkReply*);

private:
    QNetworkAccessManager* m_manager;
};


MyClass::MyClass()
{
    m_manager = new QNetworkAccessManager(this);

    connect(m_manager, SIGNAL(finished(QNetworkReply*)),
         this, SLOT(replyFinished(QNetworkReply*)));

}

void MyClass::fetch()
{
    m_manager->get(QNetworkRequest(QUrl("http://stackoverflow.com")));
}

void MyClass::replyFinished(QNetworkReply* pReply)
{

    QByteArray data=pReply->readAll();
    QString str(data);

    //process str any way you like!

}

在你在你的处理器的完成你的信号将传递一个 QNetworkReply 的对象,你可以阅读从作为响应从 QIODevice中继承。一个简单的方法来做到这仅仅是调用 readAll 获得的QByteArray 。您可以构建从一个QByteArray中的QString 和做什么你想用它做的。

其他提示

保罗·迪克森的回答可能是最好的办法,但杰西的回答确实接触了一些值得一提的。

卷曲 - 或者更准确地说是libcurl的一个奇妙功能强大的库。无需执行shell脚本和解析输出,libcurl的可用C,C ++和更多的语言比你都不能动摇以URL。如果你正在做一些奇怪的操作可能是有用的(如HTTP POST通过SSL)指出QT犯规支持。

让你看着猞猁,卷曲或wget的? 在过去,我需要抓住并从网站,SANS DB访问解析信息,如果你想获得动态格式的数据,我相信这将是最快的方式。我不是一个C的人,但我认为有一种方式来运行shell脚本和获取数据,或者至少拿到剧本运行和写作之后抢从文件输出。最坏的情况,你可以运行一个cron和检查,在与C书面文件的结尾“已完成”行,但我怀疑,这将是必要的。我想这取决于你需要做什么用的,但如果你只是想要一个页面的HTML输出,作为东西东作为wget的管道输送到AWK或者grep的就能够创造奇迹。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top