Подтвердить что ты не робот

Как я могу получить содержимое веб-страницы

Я пытаюсь получить данные веб-страницы в строке, чем я мог ее разобрать. Я не нашел методов в qwebview, qurl и другом. Не могли бы вы помочь мне? Linux, С++, Qt.

EDIT:

Спасибо за помощь. Код работает, но некоторые страницы после загрузки сломали кодировку. Я попробовал что-то вроде этого, чтобы восстановить его:

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);

Любые результаты = (.

4b9b3361

Ответ 1

Вы посмотрели 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!

}

В вашем обработчике сигнала finished вам будет передан QNetworkReply, на который вы можете прочитать ответ, поскольку он наследует от QIODevice. Простой способ сделать это - просто вызвать readAll, чтобы получить QByteArray. Вы можете построить QString из этого QByteArray и делать все, что вы хотите с ним сделать.

Ответ 2

Пол Диксон ответ, вероятно, лучший подход, но ответ Джесси отвечает на что-то заслуживающее упоминания.

cURL - или, точнее, libcURL - замечательно мощная библиотека. Нет необходимости в выполнении сценариев оболочки и синтаксического анализа, libCURL доступен на C, С++ и более языках, чем вы можете пожать URL. Может быть полезно, если вы делаете какую-то странную операцию (например, http POST over ssl?), Которую qt не поддерживает.

Ответ 3

Вы изучали рысь, завиток или wget? Раньше мне приходилось захватывать и анализировать информацию с веб-сайта, без доступа к db, и если вы пытаетесь получить данные с динамической форматировкой, я считаю, что это было бы самым быстрым способом. Я не парень C, но я предполагаю, что есть способ запуска сценариев оболочки и захвата данных, или, по крайней мере, запуск script и захват вывода из файла после его записи. В худшем случае вы можете запустить cron и проверить "законченную" строку в конце написанного файла на C, но я сомневаюсь, что это будет необходимо. Я полагаю, что это зависит от того, для чего вам это нужно, но если вы просто хотите выводить html страницы, то на восток, как wget, подключенный к awk или grep, могут творить чудеса.