Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Парсинг данных с таблицы на сайте


Автор: n199a 5.7.2018, 18:12
Здравствуйте. Имеется сайт с таблицей (Допустим site.ru). Таблица примерно 10х10 в которую заносятся числовые значения десятичные. Но размер таблицы не фиксированный, он со временем может меняться, например на 10х17.
Вопрос:  Имеется форма MainWindow (простое окно, в которую добавляется элемент "TableView"). Каким образом реализовать через таблицу "TableView", чтобы создалась именно такая же таблица (такого же размера) как на сайте с переносом числовых значений (числовые значения должны записываться в переменные массива, массив динамический тогда должен быть).

Есть пример кода для создания столбцов и колонок, но не понимаю, как сделать эту таблицу динамической:
Код

 QStandardItemModel *model = new QStandardItemModel;
    QStandardItem *item;
 
    //Заголовки столбцов
    QStringList horizontalHeader;
    horizontalHeader.append("Первый");
    horizontalHeader.append("Второй");
    horizontalHeader.append("Третий");
    horizontalHeader.append("Четвертый");
 
    //Заголовки строк
    QStringList verticalHeader;
    verticalHeader.append("Ряд 1");
    verticalHeader.append("Ряд 2");
 
    model->setHorizontalHeaderLabels(horizontalHeader);
    model->setVerticalHeaderLabels(verticalHeader);
 
    //Первый ряд
    item = new QStandardItem(QString("0"));
    model->setItem(0, 0, item);
 
    item = new QStandardItem(QString("1"));
    model->setItem(0, 1, item);
 
    item = new QStandardItem(QString("2"));
    model->setItem(0, 2, item);
 
    item = new QStandardItem(QString("3"));
    model->setItem(0, 3, item);
 
    //Второй ряд
    item = new QStandardItem(QString("4"));
    model->setItem(1, 0, item);
 
    item = new QStandardItem(QString("5"));
    model->setItem(1, 1, item);
 
    item = new QStandardItem(QString("6"));
    model->setItem(1, 2, item);
 
    item = new QStandardItem(QString("7"));
    model->setItem(1, 3, item);
 
    ui->tableView->setModel(model);
 
    ui->tableView->resizeRowsToContents();
    ui->tableView->resizeColumnsToContents();


user posted image

Автор: ss 5.7.2018, 22:41
Код

QStandardItemModel *model = new QStandardItemModel();
    model->setColumnCount(ColumnCoumn);
    model->setRowCount(RowCount);
    
    model->setData(model->index(row, column), value);

Автор: xvr 6.7.2018, 15:54
Вы не с того конца подходите к задаче. Вам сначала надо эту таблицу с сайта прочесть. Она там явно оформлена для чтения людьми, а не роботами.
Для начала посмотрите, как до неё добраться на сайте. тут вам помогут тулы для Web разработки (обычно встроенны во все современные браузеры). Найдите вашу таблицу в DOM загруженного документа.

У себя в программе грузите сайт в Web браузер (какой там сейчас в Qt, в не в курсе), и извлекаете таблицу из DOM загруженного документа.

PS. Руками парсить HTML не нужно smile

Автор: n199a 6.7.2018, 21:59
Цитата(xvr @  6.7.2018,  15:54 Найти цитируемый пост)
У себя в программе грузите сайт в Web браузер (какой там сейчас в Qt, в не в курсе), и извлекаете таблицу из DOM загруженного документа.

Принцип понял. Реализуем скачку DOM страницы html и извлекаем нужные данные. Где прочитать про эту самую реализацию скачки DOM html страницы? smile
Я так понял с DOM проще работать на Java?
 

Автор: xvr 9.7.2018, 14:41
Цитата(n199a @  6.7.2018,  21:59 Найти цитируемый пост)
Реализуем скачку DOM страницы html и извлекаем нужные данные. 

Нет. Просто загружаете страницу в WEB компонент в Qt (в 5.8 это был QtWebEngine, к версии 5.10 Qt кажется смигрировал на какой то другой движок), он сам предоставит вам доступ к DOM представлению того, что он загрузил.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)