Russian Qt Forum
Ноябрь 22, 2024, 00:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Распарсить HTML  (Прочитано 9087 раз)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« : Июнь 23, 2017, 13:15 »

Добрый день. Давненько я не занимался работой с http/html и как под задача возник такой вопрос. Есть хтмл, приходит по сети. В этой хтмл есть таблица. Нужно выцепить данные из строк этой таблицы. У таблицы нет ид. Варианты:
0. Парсить руками
1. Попробовать парсить как xml (хтмл простая, может и прокатит)
2. Загрузить в QTextDocument и найти нужные элементы через АПИ
3. Загрузить в QWebFrame
4. Загрузить в QWebEngineFrame
5. ??
Какой вариант выбрать?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Июнь 23, 2017, 13:56 »

Эмм, хтмл или все-таки html?
Парсить html парсерами xml не стоит -- html может быть невалидным и браузер это проглотил, а парсеры xml придирчивые, да и отличаются html и xml немного

Поэтому, как вариант через QWebFrame (или его аналог в Qt5 -- QWebEngineFrame) загрузить и через методы findAllElements и findFirstElement, используя css-селекторы получить таблицу и ее строчки (например css-селектор: "table tr")
Записан

Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #2 : Июнь 23, 2017, 14:37 »

Ок, я к чему-то такому склонялся. А что выбрать, WebKit или webengine?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Июнь 23, 2017, 16:39 »

Попробовал через QTextDocument, таблицу распарсить можно (через  document->findChildren<QTextTable *>()).
Теперь другой вопрос, мне нужно распарсить более сложный html с кучей фреймов. Вот у QWebPage я вижу rootFrame() и иже с ними.
А где он у QWebEnginePage?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Июнь 23, 2017, 18:45 »

Ок, я к чему-то такому склонялся. А что выбрать, WebKit или webengine?

Первый только на Qt4, другой только на Qt5 Улыбающийся

frame поидеи подгружаются с других сайтов, а после включаются в структуру страницы, поэтому: дождаться загрузки и вытащить через css-селектор
так бы я попробовал сделать другим инструментом (я парсингом занимался в 99% случаев через питон)
Записан

qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #5 : Июнь 23, 2017, 19:50 »

открыть её в ff
сделать скриншот
далее opencv, там несложно выделить регионы и получить текст
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #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 Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Июнь 29, 2017, 10:34 »

открыть её в 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 Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Июнь 29, 2017, 15:25 »

Поставил версию 5.5, юзаю вебкит оттуда. Пока всё работает.
Потом, возможно, заюзаю community release для 5.9. За ссылку кстати спасибо, нагуглить я не осилил.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.36 секунд. Запросов: 22.