Russian Qt Forum
Ноябрь 22, 2024, 05:19
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Qt Script, QtWebKit
>
Распарсить HTML
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Распарсить HTML (Прочитано 9090 раз)
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Распарсить HTML
«
:
Июнь 23, 2017, 13:15 »
Добрый день. Давненько я не занимался работой с http/html и как под задача возник такой вопрос. Есть хтмл, приходит по сети. В этой хтмл есть таблица. Нужно выцепить данные из строк этой таблицы. У таблицы нет ид. Варианты:
0. Парсить руками
1. Попробовать парсить как xml (хтмл простая, может и прокатит)
2. Загрузить в QTextDocument и найти нужные элементы через АПИ
3. Загрузить в QWebFrame
4. Загрузить в QWebEngineFrame
5. ??
Какой вариант выбрать?
Записан
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: Распарсить HTML
«
Ответ #1 :
Июнь 23, 2017, 13:56 »
Эмм, хтмл или все-таки html?
Парсить html парсерами xml не стоит -- html может быть невалидным и браузер это проглотил, а парсеры xml придирчивые, да и отличаются html и xml немного
Поэтому, как вариант через QWebFrame (или его аналог в Qt5 -- QWebEngineFrame) загрузить и через методы findAllElements и findFirstElement, используя css-селекторы получить таблицу и ее строчки (например css-селектор: "table tr")
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Распарсить HTML
«
Ответ #2 :
Июнь 23, 2017, 14:37 »
Ок, я к чему-то такому склонялся. А что выбрать, WebKit или webengine?
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Распарсить HTML
«
Ответ #3 :
Июнь 23, 2017, 16:39 »
Попробовал через QTextDocument, таблицу распарсить можно (через document->findChildren<QTextTable *>()).
Теперь другой вопрос, мне нужно распарсить более сложный html с кучей фреймов. Вот у QWebPage я вижу rootFrame() и иже с ними.
А где он у QWebEnginePage?
Записан
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: Распарсить HTML
«
Ответ #4 :
Июнь 23, 2017, 18:45 »
Цитата: Авварон от Июнь 23, 2017, 14:37
Ок, я к чему-то такому склонялся. А что выбрать, WebKit или webengine?
Первый только на Qt4, другой только на Qt5
frame поидеи подгружаются с других сайтов, а после включаются в структуру страницы, поэтому: дождаться загрузки и вытащить через css-селектор
так бы я попробовал сделать другим инструментом (я парсингом занимался в 99% случаев через питон)
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
qate
Супер
Offline
Сообщений: 1177
Re: Распарсить HTML
«
Ответ #5 :
Июнь 23, 2017, 19:50 »
открыть её в ff
сделать скриншот
далее opencv, там несложно выделить регионы и получить текст
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Распарсить HTML
«
Ответ #6 :
Июнь 29, 2017, 00:40 »
webengine не подходит, потому что там нет доступа к элементам.
https://wiki.qt.io/Porting_from_QtWebKit_to_QtWebEngine
Цитировать
QWebElement
Qt WebEngine uses a a multi-process architecture and this means that any access to the internal structure of the page has to be done asynchronously, any query result must be returned through callbacks. The QWebElement API was designed for synchronous access and this would require a complete redesign.
А если парсить что-то сложное - то webkit подходит. У него есть community releases. См.
https://download.qt.io/community_releases/5.9/5.9.0-final/
https://github.com/annulen/webkit/releases
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Распарсить HTML
«
Ответ #7 :
Июнь 29, 2017, 10:34 »
Цитата: qate от Июнь 23, 2017, 19:50
открыть её в ff
сделать скриншот
далее opencv, там несложно выделить регионы и получить текст
Ну еще можно нейросеть обучить, а дальшо оно само...
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Распарсить HTML
«
Ответ #8 :
Июнь 29, 2017, 15:25 »
Поставил версию 5.5, юзаю вебкит оттуда. Пока всё работает.
Потом, возможно, заюзаю community release для 5.9. За ссылку кстати спасибо, нагуглить я не осилил.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...