Как сделать универсальный парсер?

Блин. Напилил здоровенный текст с примерами и удалил его :(

Короче второй раз сейчас его не распишу с примерами, по этому в кратце:
1) Выделяем тело страници внутри body, чистим его от скриптов и стилей
2) начинаем с самого первого символа искать пары html тегов. Первая пара для именно этой страницы для навторизованного (зашедшего из яндекса) юзера будет вот такой:
Код:
<div id="loginBar">
	<div class="pageWidth">
		<div class="pageContent">	
			<h3 id="loginBarHandle">
				<label for="LoginControl"><a href="login/" class="concealed noOutline">Войти или зарегистрироваться</a></label>
			</h3>
			
			<span class="helper"></span>

			
		</div>
	</div>
</div>
Сравниваем в двух частях страницы процентное соотношение контента и html символов. Там, где текста больше и более вероятно будет статья.
3) Повторяя в цикле предидущий пункт можно почистить всю страницу от лишних тегов.

После этого надо оставшуюся выжимку как то то чистить, разделяя например новость от комментариев к ней. С тем как чистить я уже пока нафантазировать не могу, но вот способ выделить часть страници со статьей по моему более чем работоспособный.
 
А я вот ни как не вкурю, как посчитать например между div тут текст /div или td тут текст /td
как разбить всю структуру страницы по открывающему и закрывающему тегу, тоесть парами


по идее идет открывающий в нем могут быть куча вложенных и тд.

примерно схема вложений циры первая открывающая нарпимер div вторая такая же цифра закрывающая.
12 3 4 5 66 54 3 2 1

но не факт что они будут все открытваться из акрываться парно,


может быть вообще 1 1 2 3 4 3 1 2
 
А я вот ни как не вкурю, как посчитать например между div тут текст /div или td тут текст /td
как разбить всю структуру страницы по открывающему и закрывающему тегу, тоесть парами...

Запости сюда:
1) Пример того что необходимо обработать.
2) Вид конечного результат который требуется, от конкретного примера указанного в пункте 1.
 
А я вот ни как не вкурю, как посчитать например между div тут текст /div или td тут текст /td
как разбить всю структуру страницы по открывающему и закрывающему тегу, тоесть парами

У меня в приере видно, можно посчитать количество просто. Самый простой способ.
Если не прокатывает (мы реалисты и кривая верстка - факт частый) берем второй тег с начала и считаем ему пару а кусок от первого открытого до этого блока прибавляем к этой половине просто. Они все должны быть открыты и закрыты попарно, могут быть мелки косяки, но если такой будет вся траница и ничего не спарсится, то возникает вопрос, а нужна ли такая страница для парсинга вообще, ее проще сразу в бэды отправить.
А парные вида
1 1 2 3 4 3 1 2
будут разбиры на 2 первых блока
1 1
и
2 3 4 3 1 2
и дальше по написанному мной. Дальше их бъем на
3 4 3
и остаток, а в остатке еще и косячный закрывающий 1 без открывающего.

Вообще то, что я написал, это уже с усложнением вариант. Можно просто резать страницу на 2 части и смотреть результат, по результату резать по другому (на трети например) или работать сотсавшейся частью.
Главный смысле в том, что там, где статья находится, процент текста по отношению к тегам будет выше в любом случае.
 
Есть библиотека jTidy, но она для java, умеет строить DOM по невалидному HTML.
Насколько я понимаю, есть и для php но сам не пробывал Для просмотра ссылки Войди или Зарегистрируйся
Возможно это поможет тебе с разбором тегов...
 
Вот в html5 позаботились о писателях универсальных парсеров. Для блока с контентом сделали специальный тег - <article>
Для просмотра ссылки Войди или Зарегистрируйся
p.s. Его уже можно включать в алгоритм парсера. Если есть тег, то брать все данные внутри него.
 
Запости сюда:
1) Пример того что необходимо обработать.
2) Вид конечного результат который требуется, от конкретного примера указанного в пункте 1.
ну возьмем любой сайт любую новость, например вот



Как видим хлама очень много, вызать все фреймы скрипты коменты пара пустяков, а так же ссылки тоже не сложно.
я думаю что поиск искать надо таким образом.

Найти большее вхождение букв в любом блоке исключая любые теги в скобках <>
 
Идеальный парсер, может написать только идеальный программист ))) (это типа как для идеальной женщины - идеальный мужчина)

Ну а если серьёзно, то без каких то стандартных маркеров-тегов в которые будет помещаться текст и по которыми будет в последствии парсится контент сайта писать универсальный бессмысленно. Единственное что приходит на ум это грамотная организация фильтрации контента для такого парсера.

Ещё можно было бы собрать небольшую базу с основными патенрнами в коде наиболее распространённых CMS и поэтому признаку фильтровать и парсить. Тогда такой парсер в принципе смог бы претендовать на универсальность при периодической его поддержке
 
Ещё можно было бы собрать небольшую базу с основными патенрнами в коде наиболее распространённых CMS

Это уже не то. В принципе наверное самый простой вариант.Вырезать весб мусор, стили, фреймы оставить только таблицы и дивы.
Далее все дивы ичиститьот классов и затем искать самые большие куски текста.

Но это тоже не идеальный вариант, хотя 70% будет работать нормально.
 
Хочу поднять еще одну тему для уникального прасера. Для уникального парсера стоит задача перевода произвольной кодировки latin, iso, koi8r, windows и т.д. в одну единственную, например в utf-8.
Вот как победить эту проблему? Есть ли готовый велосипед?
 
Назад
Сверху