поиск подстроки в QString для парсинга

Рейтинг: 0Ответов: 1Опубликовано: 10.03.2023

Всем привет! Пытаюсь распарсить данные из сайта, используя 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, а для endStrPos каждый  
        // раз разные значения
        qDebug() << startStrPos << endStrPos;

        QString ctn = page.mid(startStrPos, endStrPos - startStrPos);
        ui->textEdit->setPlainText(ctn);
    }
    reply->deleteLater();
    pBar->close();
}

Ответы

▲ 0

Я записал данные в .html файл и оказалось, что не все строки почему-то переводятся правильно. Например, на сайте строка выглядит так: <div class="ListingCars ListingCars_outputType_list">, но в моем файле ту же строку получил таким образом <div class="ba4RoKFagDA4SUZQ ListingCars_outputType_list">. Поэтому некоторые подстроки он не находит.