извлечь информацию с веб-сайта, используя Qt?

Я хотел бы извлечь «информацию» в теге «b» => 123456789

Это HTML-код:

<body>
<div>
<table>
<tbody>
<tr>
<td class="myclass">
<b>123456789</b>
</td>
</tr>
</tbody>
</table>
</div>
</body>

Итак, я пытаюсь это:

void My_Test_Dialog::on_pushButton_clicked()
{QWebView *webview = new QWebView(parentWidget());

webview->load(QUrl("http://www.esesese.com"));

webview->show();

// get HTML element information
QWebElementCollection colls = webview->page()->mainFrame()->findAllElements("td.myclass b");foreach(QWebElement elemento, colls)
{
ui->lineEdit_data->setText(elemento.toInnerXml());
}
}

У меня есть форма с кнопкой («обновление вызова») и LineEdit, поэтому, если я нажимаю кнопку «обновить», автоматически LineEdit должен установить текст «123456789». но мой код не работает .. Текст LineEdit остается Emply.

Я включаю это:

#include <QtWebKit>
#include <QtWebKitWidgets/QWebFrame>
#include <QWebView>

QT file.pro это:

QT += core gui
QT += network
QT += webkit
QT += webkitwidgets

0

Решение

Как уже упоминалось, вы должны убедиться, что вы ждете достаточно данных в вашем QWebView загрузить.

Вы можете сделать это (очень упрощенно) примерно так:

Определите webView как часть класса диалога, а также объявите слот, который вы позже сможете подключить к сигналу веб-представления

class My_Test_Dialog
{
public slots:

// slot to read your data once you are finished
void readPage(bool ok);

// whatever else you did
private:
QWebView *webView;

}

Тогда, например, в конструкторе или в другом месте вы можете создать веб-представление и подключить его loadFinished() сигнал к readPage() слот показан также в определении класса выше

// create QWebview and connect its loadFinished signal to our slot
webView = new QWebView(this);
QObject::connect(webView,SIGNAL(loadFinished(bool)), this, SLOT( readPage(bool) ) );

тогда в вашем on_pushButton_clicked() метод, которым вы только загружаете страницу (и показывает веб-просмотр, если это то, что вам нужно)

void My_Test_Dialog::on_pushButton_clicked()
{
webView->load(QUrl("http://www.esesese.com"));
}

а затем, как только диалог закончил загрузку слота readData() будет вызван автоматически, и там вы можете просто сделать операцию чтения

void MyDialog::readPage(bool ok)
{
// get HTML element information
QWebElementCollection colls = webView->page()->mainFrame()->findAllElements("td.myclass b");

foreach(QWebElement elemento, colls)
{
lineEdit->setText(elemento.toInnerXml());
}

}

Позвольте мне знать, если это помогает.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]