使用Qt从网站中提取信息

extract information from a website using Qt?

本文关键字:提取 信息 网站 Qt 使用      更新时间:2023-10-16

我想提取b标签中的information=> 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());
        }
}

我有一个带有按钮(call update)和LineEdit的表单,因此,如果我单击update按钮,LineEdit应该会自动设置文本123456789。但是我的代码不起作用。LineEdit的文本仍为空。

我包括这个:

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

QT file.pro 是 :

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

如前所述,您需要确保等待足够长的时间才能加载QWebView中的数据。

你可以用这样的东西来做到这一点(非常简单):

将 webView 定义为对话框类的一部分,并声明一个槽,以后可以连接到 Web 视图的信号

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

然后,例如在构造函数或其他地方,您可以创建 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()方法中,您只加载页面(如果需要,则显示 Web 视图)

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

让我知道这是否有帮助。