Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: Авварон от Июнь 23, 2017, 13:15



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


Название: Re: Распарсить HTML
Отправлено: gil9red от Июнь 23, 2017, 13:56
Эмм, хтмл или все-таки html?
Парсить html парсерами xml не стоит -- html может быть невалидным и браузер это проглотил, а парсеры xml придирчивые, да и отличаются html и xml немного

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


Название: Re: Распарсить HTML
Отправлено: Авварон от Июнь 23, 2017, 14:37
Ок, я к чему-то такому склонялся. А что выбрать, WebKit или webengine?


Название: Re: Распарсить HTML
Отправлено: Авварон от Июнь 23, 2017, 16:39
Попробовал через QTextDocument, таблицу распарсить можно (через  document->findChildren<QTextTable *>()).
Теперь другой вопрос, мне нужно распарсить более сложный html с кучей фреймов. Вот у QWebPage я вижу rootFrame() и иже с ними.
А где он у QWebEnginePage?


Название: Re: Распарсить HTML
Отправлено: gil9red от Июнь 23, 2017, 18:45
Ок, я к чему-то такому склонялся. А что выбрать, WebKit или webengine?

Первый только на Qt4, другой только на Qt5 :)

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


Название: Re: Распарсить HTML
Отправлено: qate от Июнь 23, 2017, 19:50
открыть её в ff
сделать скриншот
далее opencv, там несложно выделить регионы и получить текст


Название: Re: Распарсить HTML
Отправлено: Alex Custov от Июнь 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


Название: Re: Распарсить HTML
Отправлено: Racheengel от Июнь 29, 2017, 10:34
открыть её в ff
сделать скриншот
далее opencv, там несложно выделить регионы и получить текст

Ну еще можно нейросеть обучить, а дальшо оно само...


Название: Re: Распарсить HTML
Отправлено: Авварон от Июнь 29, 2017, 15:25
Поставил версию 5.5, юзаю вебкит оттуда. Пока всё работает.
Потом, возможно, заюзаю community release для 5.9. За ссылку кстати спасибо, нагуглить я не осилил.