最近在研究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,我们看下里面的数据,如下所示
,完美实现!!!!
如果上述代码帮助您很多,可以打赏下以减少服务器的开支吗,万分感谢!


点击此处登录后即可评论