![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 28.02.2011
Сообщений: 127
|
![]()
Всем привет!
Необходимо написать parser содержимого html - в частности, тэгов Лично я в основу положил обычный проход по html, с поиском начального символа тэга <, определения типа тэга и считывания его содержимого до следующего открывающего, либо закрывающего тэга Плюс, необходимо учитывать вложенность тэгов То есть, если ситуация Код HTML:
<div>текст1 <a>текст2</a> текст3</div> div : текст 1 текст2 текст3 div, a : текст 2 a сохраняется, так как у него тип - inside (сам придумал), тк, если не приписывать содержимое тэга а в тэг div, может потеряться смысл содержимого тэга div Вобщем-то, алгоритм почти реализован, но ситуация с вложенностью в нём обрабатывается плохо... Может, у кого-то будут какие-то свежие идеи на счёт такого parser'а html? Буду благодарен за любой ответ! Последний раз редактировалось Lindemann66; 28.07.2011 в 13:30. |
![]() |
![]() |
![]() |
#2 | |
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
![]()
Не совсем понял что конкретно хочешь получать в конце?
Цитата:
Код:
1. Вызвал функцию, получил Код:
результат Код:
Код:
|
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 28.02.2011
Сообщений: 127
|
![]()
спасибо за совет, так и сделал!
правда, появилась проблема допустим, строка вида Код HTML:
какой_то_текст...<div>текст1<div>текст2</div>текст3</div>...какой_то_текст мы ведь не знаем, какой именно закрывающий div - нужный, их может там ещё штук 100 будет поэтому первый вот тут то и появляется ошибка по первому div'у извлекается неправильный текст Код HTML:
текст1<div>текст2
![]() |
![]() |
![]() |
![]() |
#4 |
Регистрация: 28.07.2011
Сообщений: 3
|
![]()
Ищи первый с конца </div>
----------------------------------------------
С/C++/Java/asm начинающий... |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
![]()
или же если нет возможности с конца искать, то заведи переменную для текущего тега и увеличивай/уменьшай ее при нахождении такого же открывающегося/закрывающегося тега..
Так, кажется, правильнее будет, с конца не всегда результат правильным может быть |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 28.02.2011
Сообщений: 127
|
![]() |
![]() |
![]() |
![]() |
#7 |
Регистрация: 28.07.2011
Сообщений: 6
|
![]()
Решается рекурсией как написал |{ot только немного не так.
Код:
Код:
2. рекурсивно вызвал опять с тем что получил результат Код:
3. Вызвал опять, получил Код:
4. Вернулся, получил Код:
Код:
6. Вернулся. Заодно можно сделать проверку тегов и повторяющиеся div-ы не страшны. Последний раз редактировалось d_pilot; 29.07.2011 в 15:05. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 28.02.2011
Сообщений: 127
|
![]()
Вобщем, написал я алгоритм (но не рекурсивный)
И 1 проблема всего осталась - как раз с вложенностью Почитал посмотрел про MSHTML, решил с помощью него написать, а свой алгоритм пока оставил, если что, допишу, чтоб вложенность корректно обрабатывал А код с MSHTML выкладываю, вдруг кому пригодится в дальнейшем Код:
Код:
vector<CString> tags_names = GetListsOfContentTag(); - получение списка тэгов для обработки (div, p, ...) Также для каждого тэга вычисляется вложенность: Код:
Последний раз редактировалось Lindemann66; 29.07.2011 в 15:53. |
![]() |
![]() |
![]() |
#9 |
Участник клубаДжуниор
Регистрация: 23.08.2008
Сообщений: 1,616
|
![]()
Не советовал бы использовать рекурсию, так как при большом количестве тегов это убьет производительность напрочь.
Я придумывал такой алгоритм, правда потом его довольно сильно дорабатывал, но основа была, и все это работало очень быстро даже на огромных страницах.
pushl $0x18E3DF6B
call ICQ |
![]() |
![]() |
![]() |
#10 | ||
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
![]()
ну алгоритмов придумать можно еще сразу десяток разных, для разных ситуаций выбрать свой оптимальный необходимо, О-оценка или по еще какой-либо оценке алгоритма, но главное, как я считаю, то это надежность (помехоустойчивось)
Цитата:
Код:
Цитата:
![]() |
||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
mail.ru parser | SAMY93 | Работа с сетью в Delphi | 7 | 09.08.2010 12:53 |
php2xls com parser | crazy horse | PHP | 0 | 08.10.2009 09:02 |
HTML Parser на Delphi 2009 | Rubaka | Работа с сетью в Delphi | 3 | 11.08.2009 08:35 |