我正在尝试使用
QNetworkAccessManager
解析来自站点的数据。为此,我将站点数据写入 QString
,但是当我使用 indexOf
进行子字符串搜索时,结果不正确:一个值为 -1。请告诉我,这里有什么问题?
void MainWindow::on_pushButton_clicked()
{
pBar = new QProgressBar;
pBar->setMaximum(0); // максимум
pBar->setMinimum(0);
pBar->show();
QNetworkRequest request;
QUrl url(tr("https://auto.ru/tver/cars/all/? utm_source=yandex_direct&utm_medium=direct.brand&utm_campaign=460_hand_desktop_used_brand_search_Tver_none_82222146&utm_content=cid%3A82222146%7Cgid%3A5114476686%7Caid%3A13330832990%7Cph%3A42898716904%7Cpt%3Apremium%7Cpn%3A1%7Csrc%3Anone%7Cst%3Asearch%7Ccgcid%3A0%7Cdt%3Adesktop&utm_term=auto+ru&adjust_t=cl4qttt_nsw4it6&adjust_campaign=82222146&adjust_adgroup=5114476686&tracker_limit=10000&adjust_ya_click_id=1049526807999603789&_openstat=ZGlyZWN0LnlhbmRleC5ydTs4MjIyMjE0NjsxMzMzMDgzMjk5MDt5YW5kZXgucnU6cHJlbWl1bQ&yclid=639777327900000255"));
request.setUrl(url);
this->manager->get(request);
connect(manager, SIGNAL(finished(QNetworkReply*)), this,
SLOT(replyFinished(QNetworkReply*)));
}
void MainWindow::replyFinished(QNetworkReply* reply)
{
if (reply->error() == QNetworkReply::NoError)
{
QByteArray content= reply->readAll();
QTextCodec *codec = QTextCodec::codecForName("utf8");
QString page = codec->toUnicode(content.data());
int startStrPos = page.indexOf("<div class=\"ListingCars
ListingCars_outputType_list\">");
int endStrPos = page.lastIndexOf("<div class=\"ListingCarsPagination\">");
// startStrPos = -1
qDebug() << startStrPos << endStrPos;
QString ctn = page.mid(startStrPos, endStrPos - startStrPos);
ui->textEdit->setPlainText(ctn);
}
reply->deleteLater();
pBar->close();
}
您搜索的字符串跨越 2 个源代码行,这是不正确的。您应该使用单行:
int startStrPos = page.indexOf("<div class=\"ListingCars ListingCars_outputType_list\">");
或者您应该使用字符串将字符串分成两部分以提高可读性:
int startStrPos = page.indexOf("<div class=\"ListingCars"
" ListingCars_outputType_list\">");