Qt安卓app爬虫之数据csv文件存储

2023年4月25日 14:46 ry 802

最近在研究qt安卓方向,前段时间写了qt采集数据的,现在这次主要实现qt采集数据后将数据保存为csv格式,本次我们要采集的网址如下所示https://api.lovelive.tools/api/SweetNothings/1000/Serialization/Json,我们可以直接在浏览器打开看到数据,数据如下所示

接下来,我们用代码实现,代码如下所示

QString links= "https://api.lovelive.tools/api/SweetNothings/1000/Serialization/Json";
               QNetworkAccessManager *manager = new QNetworkAccessManager(this);
                qDebug()<<links;
               QUrl url(links);
               QNetworkRequest request(url);

               request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
               request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);

               QNetworkReply *reply = manager->get(request);

               connect(reply, &QNetworkReply::finished, [=]() {
                   if (reply->error() == QNetworkReply::NoError) {
                       // 以二进制形式读取响应数据
                       QByteArray datas = reply->readAll();


                       QJsonDocument responseDocument = QJsonDocument::fromJson(datas);
                       QJsonObject responseObject = responseDocument.object();
                       QJsonArray jsonArray = responseObject.value("returnObj").toArray();
                       


                       for(int i=0;i<jsonArray.size();i++)

                        {
                           QString value = jsonArray.at(i).toString();
                       
                           mw->ui->textEdit->append(value);
                           mw->ui->textEdit->textCursor();
                        }

                     

                   } else {
                       qDebug() << reply->errorString();
                   }

               });

点击采集按钮后执行爬虫操作,先获取响应后的数据,然后转为json格式,再进行取值操作转为数组,然后遍历数组将数据一次打印在界面上,接下来我们需要保存数据存为csv了,这个很简单,在爬虫界面的类增加一个数据保存的方法,该方法的代码如下

void MainWindow::saveCsv(const QString &filename, const QList<QStringList> &data)
{
    QTextCodec* codec = QTextCodec::codecForName("UTF-8");
    // 创建新文件或者打开已存在的文件
        QFile file(filename);
        if (file.open(QIODevice::WriteOnly | QIODevice::Text))
        {
            // 用QTextStream写入文件
            QTextStream out(&file);
            //写入列名称
            out<<codec->fromUnicode( QString("文本内容"))<<"\n";
            // 按行写入数据到文件
            for (int row = 0; row < data.size(); ++row)
            {
                QStringList strList = data[row];
                for (int col = 0; col < strList.size(); ++col)
                {
                    if (col > 0)
                        out << ",";
                    // 写入每个数据项
                    out << "\"" << strList[col] << "\"";
                }
                // 写入行尾分隔符
                out << "\n";
            }

            // 关闭文件
            file.close();
        }
}

记得声明下,如图所示

注意下,在安卓中文件存储的路径可以自定义,具体如下所示

这里我将数据存到文档目录中,代码如下所示

// 创建新文件或者打开已存在的文件
           QString filename = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/love.csv";
//新建数据
                       QList<QStringList> data;


                       for(int i=0;i<jsonArray.size();i++)

                        {
                           QString value = jsonArray.at(i).toString();
                           qDebug()<<value;
                           QStringList record1;
                           record1 << value;
                           data.append(record1);
                           mw->ui->textEdit->append(value);
                           mw->ui->textEdit->textCursor();
                        }

                      //采集完数据后显示出保存excel的按钮
                      mw->ui->pushButton_3->show();
                      //点击保存按钮的时间触发保存
                      connect(mw->ui->pushButton_3,&QPushButton::clicked,mw,[=](){
                          mw->saveCsv(filename, data);
                          QMessageBox::information(mw, "保存成功", "文件已成功保存!");
                      });

采集完后数据,点击保存excel就实现了数据保存了,界面如下所示注意下,导出的路径可以在文件管理器中寻找,设置按照日期进行排序很容易找到,如下所示,然后我们打开love.csv,我们看下里面的数据,如下所示,完美实现!!!!

如果上述代码帮助您很多,可以打赏下以减少服务器的开支吗,万分感谢!

欢迎发表评论~

点击此处登录后即可评论


评论列表
2023年11月17日 14:36 ry: 回复
需要源码的可以联系我,本人承接各种软件定制,数据采集,接口搭建,网站开发,环境配置的杂活,需要的可以联系我 qq:1449917271 微信:liuyoudyping


赣ICP备2021001574号-1

赣公网安备 36092402000079号