Pregunta

Estoy tratando de obtener los datos de la página web en una cadena que podría analizar. No encontré ningún método en qwebview, qurl y otros. ¿Usted me podría ayudar? Linux, C ++, Qt.

EDIT:

Gracias por la ayuda. El código funciona, pero algunas páginas después de la descarga tienen un juego de caracteres roto. Intenté algo como esto para repararlo:

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

Cualquier resultado = (.

¿Fue útil?

Solución

¿Ha visto QNetworkAccessManager ? Aquí hay una muestra aproximada y lista que ilustra el uso:

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!

}

En su controlador para la finalizado le indica que se le pasará un QNetworkReply , del cual puede leer la respuesta como hereda de QIODevice . Una manera simple de hacer esto es simplemente llamar a readAll para obtener un QByteArray . Puede construir un QString a partir de ese QByteArray y hacer lo que sea quieres hacer con eso.

Otros consejos

La respuesta de Paul Dixon es probablemente el mejor enfoque, pero la respuesta de Jesse toca algo que vale la pena mencionar.

cURL - o más precisamente, libcURL es una biblioteca maravillosamente poderosa. No es necesario ejecutar scripts de shell y analizar resultados, libCURL está disponible en C, C ++ y más lenguajes de los que puede sacudir una URL. Puede ser útil si está haciendo alguna operación extraña (como http POST sobre ssl?) Que qt no admite.

¿Has mirado en lince, rizo o wget? En el pasado, necesitaba obtener y analizar información de un sitio web, sin acceso a base de datos, y si está tratando de obtener datos formateados dinámicamente, creo que esta sería la forma más rápida. No soy un tipo C, pero supongo que hay una manera de ejecutar scripts de shell y tomar los datos, o al menos hacer que el script se ejecute y tomar la salida de un archivo después de escribir en él. En el peor de los casos, podría ejecutar un cron y verificar si & Quot; terminado & Quot; línea al final del archivo escrito con C, pero dudo que sea necesario. Supongo que depende de para qué lo necesites, pero si solo quieres el html de salida de una página, algo tan oriental como un wget conectado a awk o grep puede hacer maravillas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top