Вечная тема про парсинг HTML

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
beria
постоялец
Сообщения: 130
Зарегистрирован: 29.09.2016 07:57:13

Вечная тема про парсинг HTML

Сообщение beria »

Да, нашел много вариантов решений и иные даже вроде работают....
Да, изучил мануал про стандарт HTML 5
И про XML тоже....
Даже про сокеты, SSL и OpenVPN...
И вообще сейчас работает всё, кроме парсера......
А теперь, может все-же у кого завалялся заведомо работающий кроссистемный вариант, чтобы засунуть поток или файл в некую не визуальную (ну нет никакого GUI у программы и не надо) и устойчивую к ошибкам источника структуру (коллекцию или дерево), по которой потом можно пройтись циклом и отредактировать то что мне там надо отредактировать, а потом собрать оную структуру обратно в HTML, а далее в поток или файл....
Ну задолбали исходники без комментариев, примеров или работающие ,но ссылающиеся на библиотеки которых или в win нет или в линуксе, или вообще только из какой-то левой версии Дельфи.... :mrgreen:
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Самым лучшим "парсером", является любой "интернет проводник". Там можно обратиться к элементам по ID, или по NAME, или по CLASS, или по названию тега. Наиболее простое решение, написать программу на JS и ей парсить HTML в любом интернет вьювере.

С другой стороны, в Лазарусе, стандартный Лазарусовский HTML-вьювер, так или иначе - строит DOM-дерево. Соответственно, можно его использовать, в качестве, элемента без GUI, который построит вам DOM-дерево, по которому вы сможете пробежаться с помощью цикла и внести необходимые корректировки.
Аватара пользователя
beria
постоялец
Сообщения: 130
Зарегистрирован: 29.09.2016 07:57:13

Сообщение beria »

vitaly_l писал(а):Самым лучшим "парсером", является любой "интернет проводник". Там можно обратиться к элементам по ID, или по NAME, или по CLASS, или по названию тега. Наиболее простое решение, написать программу на JS и ей парсить HTML в любом интернет вьювере.

С другой стороны, в Лазарусе, стандартный Лазарусовский HTML-вьювер, так или иначе - строит DOM-дерево. Соответственно, можно его использовать, в качестве, элемента без GUI, который построит вам DOM-дерево, по которому вы сможете пробежаться с помощью цикла и внести необходимые корректировки.


Ну какой интернет-проводник? Какая жава-скрипт? Какие вьюверы? Нету такого и не будет. Есть только голая консоль и даже в общем случае никакой сети, а из ввода-вывода только ини файлы.
И лазарувский вьювер плотно завязан на визуальные элементы и тащит кучу библиотек, кои мне даром не нужны. Если бы мне надо было отобразить страницу - есть дофига документированных способов и куда проще и удобнее лазарувского.... Тот же хромиум. Там вообще почти нечего даже кодить не надо, немеренно примеров , ну ежели не лень почти 100 метров библиотек тянуть в проект...
Есть в сырцах FPC "Fast HTML Parser" . Но это именно голый парсер для которого надо указать синтаксис, но как это там сделать - очередной вопрос, ибо далее он используется для парсинга не HTML данных, а док традиционно нет.....
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

beria, человек не видел ничего кроме винды... что ты от него хочешь? Имхо, если нужен парсер, то придется его написать. Тем более, что в html нет ничего особо страшного. Да, долго, но, в принципе, теги оформлены так, что их довольно легко найти. А если нужно ковыряться в самих тегах, не как строка, а как набор данных, то придется по любому делать синтаксический анализ.

Реализацию дерева, списка, механизма обхода не бинарного дерева и преобразования его в список можно найти в любой учебнике по паскалю начиная от 70х годов. Ну а уж сохранить в список или прочитать в дерево, думаю, будет еще проще. Все компоненты заточены под что-то определенное, поэтому сильно сомневаюсь, что найдется какой-нибудь универсальный. Тем более, что сейчас консоль не сильно котируется.
Аватара пользователя
beria
постоялец
Сообщения: 130
Зарегистрирован: 29.09.2016 07:57:13

Сообщение beria »

Лекс Айрин писал(а):Имхо, если нужен парсер, то придется его написать.

Я и сам к этому пришел в итоге, хотя до последнего откладывал в наивной надежде найти готовое решение да лень-матушка,... Точнее нормальных решений нашел несколько, но не для фрипаскаля или время разбора чужого кода будет гораздо более написания своего... Не понимаю, почему именно для фрипаса, эта тема так не популярна....
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

beria писал(а):Не понимаю, почему именно для фрипаса, эта тема так не популярна....


Видимо, из-за того, что, вслед за дельфи, в нем сделан упор на БД. Да и паскаль уже не так популярен как раньше. Хотя все может измениться, но, имхо, для этого нужен диалект паскаля не умеющий коммерческого балласта. Развитие FPC сейчас тормозит необходимость оглядываться на дельфи. А дельфи оглядывается на си.
CynicRus
постоялец
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Сообщение CynicRus »

Можно кстати попробовать вот это: https://github.com/benibela/internettools/blob/master/data/simplehtmlparser.pas , там же есть и в дерево парсер. Похоже, именно то, что ищет ТС.
Аватара пользователя
beria
постоялец
Сообщения: 130
Зарегистрирован: 29.09.2016 07:57:13

Сообщение beria »

CynicRus писал(а):Можно кстати попробовать вот это: https://github.com/benibela/internettools/blob/master/data/simplehtmlparser.pas , там же есть и в дерево парсер. Похоже, именно то, что ищет ТС.

Вроде оно. Спс. :mrgreen:
Ответить