Как я могу получить содержимое веб-страницы
Вопрос
я пытаюсь получить данные веб-страницы в виде строки, которую я мог бы разобрать.Я не нашел никаких методов в 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 ( Кодовое устройство).Простой способ сделать это - просто вызвать Читать все чтобы получить QByteArray QByteArray.Вы можете сконструировать QString ( строка q ) из этого QByteArray и делайте с ним все, что хотите.
Другие советы
Ответ Пола Диксона, вероятно, является лучшим подходом, но ответ Джесси действительно затрагивает кое-что, о чем стоит упомянуть.
cURL - или, точнее, libcURL - это удивительно мощная библиотека.Нет необходимости выполнять сценарии оболочки и анализировать выходные данные, libCURL доступен на C, C ++ и большем количестве языков, чем вы можете указать по URL.Это может быть полезно, если вы выполняете какую-то странную операцию (например, http POST через ssl?), которую qt не поддерживает.
Вы заглядывали в lynx, curl или wget?В прошлом мне нужно было получать и анализировать информацию с веб-сайта без доступа к базе данных, и если вы пытаетесь получить динамически отформатированные данные, я считаю, что это был бы самый быстрый способ.Я не специалист по C, но я предполагаю, что есть способ запускать сценарии оболочки и извлекать данные или, по крайней мере, запускать скрипт и извлекать выходные данные из файла после записи в него.В худшем случае вы могли бы запустить cron и проверить наличие "готовой" строки в конце записанного файла с помощью C, но я сомневаюсь, что это будет необходимо.Я полагаю, это зависит от того, для чего вам это нужно, но если вам просто нужен выходной html страницы, что-то вроде wget, переданного по каналу в awk или grep, может творить чудеса.