|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.07.2011, 13:25 | #1 |
Форумчанин
Регистрация: 28.02.2011
Сообщений: 127
|
HTML Parser
Всем привет!
Необходимо написать 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. |
28.07.2011, 14:25 | #2 | |
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
Не совсем понял что конкретно хочешь получать в конце?
Цитата:
Код:
1. Вызвал функцию, получил Код:
результат Код:
Код:
|
|
28.07.2011, 18:00 | #3 |
Форумчанин
Регистрация: 28.02.2011
Сообщений: 127
|
спасибо за совет, так и сделал!
правда, появилась проблема допустим, строка вида Код HTML:
какой_то_текст...<div>текст1<div>текст2</div>текст3</div>...какой_то_текст мы ведь не знаем, какой именно закрывающий div - нужный, их может там ещё штук 100 будет поэтому первый вот тут то и появляется ошибка по первому div'у извлекается неправильный текст Код HTML:
текст1<div>текст2
|
28.07.2011, 18:16 | #4 |
Регистрация: 28.07.2011
Сообщений: 3
|
Ищи первый с конца </div>
----------------------------------------------
С/C++/Java/asm начинающий... |
28.07.2011, 23:29 | #5 |
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
или же если нет возможности с конца искать, то заведи переменную для текущего тега и увеличивай/уменьшай ее при нахождении такого же открывающегося/закрывающегося тега..
Так, кажется, правильнее будет, с конца не всегда результат правильным может быть |
29.07.2011, 11:18 | #6 |
Форумчанин
Регистрация: 28.02.2011
Сообщений: 127
|
|
29.07.2011, 15:03 | #7 |
Регистрация: 28.07.2011
Сообщений: 6
|
Решается рекурсией как написал |{ot только немного не так.
Код:
Код:
2. рекурсивно вызвал опять с тем что получил результат Код:
3. Вызвал опять, получил Код:
4. Вернулся, получил Код:
Код:
6. Вернулся. Заодно можно сделать проверку тегов и повторяющиеся div-ы не страшны. Последний раз редактировалось d_pilot; 29.07.2011 в 15:05. |
29.07.2011, 15:51 | #8 |
Форумчанин
Регистрация: 28.02.2011
Сообщений: 127
|
Вобщем, написал я алгоритм (но не рекурсивный)
И 1 проблема всего осталась - как раз с вложенностью Почитал посмотрел про MSHTML, решил с помощью него написать, а свой алгоритм пока оставил, если что, допишу, чтоб вложенность корректно обрабатывал А код с MSHTML выкладываю, вдруг кому пригодится в дальнейшем Код:
Код:
vector<CString> tags_names = GetListsOfContentTag(); - получение списка тэгов для обработки (div, p, ...) Также для каждого тэга вычисляется вложенность: Код:
Последний раз редактировалось Lindemann66; 29.07.2011 в 15:53. |
29.07.2011, 15:53 | #9 |
Участник клубаДжуниор
Регистрация: 23.08.2008
Сообщений: 1,616
|
Не советовал бы использовать рекурсию, так как при большом количестве тегов это убьет производительность напрочь.
Я придумывал такой алгоритм, правда потом его довольно сильно дорабатывал, но основа была, и все это работало очень быстро даже на огромных страницах.
pushl $0x18E3DF6B
call ICQ |
29.07.2011, 17:38 | #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 |