Вернуться   Форум SAPE.RU > Общие вопросы > Разработка и сопровождение сайтов

-->
Ответ
 
Опции темы
Старый 13.09.2010, 22:40   #1
Эксперт
 
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
boric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущее
По умолчанию Универсальный парсер HTML кода

У меня часто возникает потребность парсинга html-страниц с дальнейшим анализом. Потребностей у меня две:
1) Преобразование html в dom-модель, и делай с ней, что хошь.
2) Преобразование html в простой текст, т.е. вычленение только текста.

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

Но главное, это то, что на шибко кривом HTML-коде возникают ошибки парсинга. Предварительной обработкой регулярными выражениями я могу исправить ошибки только конкретных источников. А мне хотелось бы иметь максимально устойчивую к ошибкам систему парсинга. Чтобы хотя бы только текст вычленяла из HTML-кода надежно.

Для валидного HTML-кода написать такой скрипт не сложно, но все мои системы парсинга разбиваются о суровую реальность.

Вот несколько кривых кусков HTML кода с одного государственного портала:
Код:
<A\n <BR / href="http://www.site.ru" >Некий текст</A>
<P Иванов id=Значение_без_кавычек_кирилицей><P>Некий текст</P>
<SPAN><SPAN Л.И. Некий текст</SPAN>
В общем на таких "тэгах" все мои скрипты и библиотеки спотыкаются, из-за них вообще отказываются такую страницу обрабатывать.

Как страницы с такими кусками html-кода обрабатывать?
Мне хотя бы простой текст с таких страниц вычленять.
boric вне форума   Ответить с цитированием
Старый 13.09.2010, 23:11   #2
Эксперт
 
Аватар для Anadonam
 
Регистрация: 29.10.2009
Адрес: Вологда and SSHA
Сообщений: 3,897
Вес репутации: 353
Anadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущее
Отправить сообщение для Anadonam с помощью ICQ
По умолчанию

искать по запросу "парсинг html" пробывал ?- там вроде куча полезной инфы...
Anadonam вне форума   Ответить с цитированием
Старый 13.09.2010, 23:26   #3
шатапфакап
 
Аватар для justworker
 
Регистрация: 01.09.2008
Адрес: там где клен шумит (с)
Сообщений: 1,472
Вес репутации: 265
justworker - прекрасное будущееjustworker - прекрасное будущееjustworker - прекрасное будущееjustworker - прекрасное будущееjustworker - прекрасное будущееjustworker - прекрасное будущееjustworker - прекрасное будущееjustworker - прекрасное будущееjustworker - прекрасное будущееjustworker - прекрасное будущееjustworker - прекрасное будущее
По умолчанию

boric, dom модель исходника должна быть четкой, иначе тут любой парсер спотыкнется, если взять допустим тот же xml то там парсеры(классы php) вообще отказываются работать если нет закрывающих или открывающих тегов в нужной последовательности. Кстати на php.net есть уйма regexp по корректировке кривых html кодов, видимо придется их объединить в один скрипт, который будет все корректировать.

по поводу вычленения текста, simple_html_dom это лучшее что я видел, работает быстро, но на кривом коде 100% споткнется

есть еще вариант 2 и 3, оба они из разряда, "какбе лень заморачиваться"
2) на этапе анализа кода при обнаружении кривых тегов, не закрытых итд итп прекращать работу и переходить к другой странице
3) модификация п.2, только для варианта с вытаскиванием текста со страницы, парсить все, что можно собрать со страницы, т.е. что не проходит по тегам пропускать, на выходе соотвественно будет какой-то спарсенный текст, но не целиком
__________________
Проблемы, простои, убогая техподдержка, потерянное время, высокие цены, отсутствие достойных компенсаций, наплевательское отношение к клиентам, велкам!
justworker вне форума   Ответить с цитированием
Старый 13.09.2010, 23:45   #4
Мастер
 
Аватар для Valentyn
 
Регистрация: 26.06.2007
Адрес: Ukraine
Сообщений: 652
Вес репутации: 231
Valentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордится
Отправить сообщение для Valentyn с помощью ICQ
По умолчанию

boric, в общем случае никак =)

Все валидные семьи похожи друг на друга, каждая невалидная семья невалидна по-своему. (Лев Толстой)

Понять, в чём причина невалидности в общем случае нельзя. Ладно там кто-то тег <br /> внутрь тега <a запихнул>, а если кто-то на бекспейсе подремал?
__________________
ab788932cee4ff449d2ec584da8af2b7 47fa7a5a72b89d8828985beec3a3c252
Valentyn вне форума   Ответить с цитированием
Старый 14.09.2010, 00:53   #5
Эксперт
 
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
boric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущее
По умолчанию

Anadonam,
Цитата:
искать по запросу "парсинг html" пробывал ?- там вроде куча полезной инфы...
Пробовал... Много интересного, но или все слишком наворочено (и очень медленно) или просто, но негибко.

justworker,
Цитата:
модификация п.2, только для варианта с вытаскиванием текста со страницы, парсить все, что можно собрать со страницы, т.е. что не проходит по тегам пропускать, на выходе соотвественно будет какой-то спарсенный текст, но не целиком
Такой вариант мне и нужен. Если б только закрывающие теги отсутствовали, то это еще ничего, но ведь и закрывающую скобку в теге забывают ставить, а вместо атрибутов вообще пишут невесть что.

Valentyn,
Цитата:
Все валидные семьи похожи друг на друга, каждая невалидная семья невалидна по-своему. (Лев Толстой)
Так и есть, поэтому про преобразование в ДОМ-модель я уже не говорю.

Но я не оставляю надежды найти простое решение для вычленения текста. Полнота 100% не требуется. Если уж все кривое, то некие потери текста приемлемы. Сложные решения рассматривать не хочу, т.к. для задачи вычленения только текста считаю их избыточными, да и работают они медленно - 20000 документов у меня почти сутки обрабатывались.

Хочу ограничиться небольшим набором регулярных выражений. Надо или убрать теги, оставив текст, или вычленить из тегов текст. Но расчитывать на закрывающие теги я не могу, да и на то, что тег будет закрыт треугольной скобкой - тоже. На месте атрибутов тегов может быть все что угодно, и это "все что угодно" надо удалять. В общем попробую простой вариант придумать. Главное, чтобы большие куски текста не выпадали.
boric вне форума   Ответить с цитированием
Старый 14.09.2010, 00:55   #6
Мастер
 
Аватар для Valentyn
 
Регистрация: 26.06.2007
Адрес: Ukraine
Сообщений: 652
Вес репутации: 231
Valentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордится
Отправить сообщение для Valentyn с помощью ICQ
По умолчанию

boric, а вы что потом с очищенным текстом делать будете?
__________________
ab788932cee4ff449d2ec584da8af2b7 47fa7a5a72b89d8828985beec3a3c252
Valentyn вне форума   Ответить с цитированием
Старый 14.09.2010, 01:16   #7
Эксперт
 
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
boric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущее
По умолчанию

Valentyn,
Цитата:
а вы что потом с очищенным текстом делать будете?
Пока этот текст нужен для поискового индекса и статистической обработки некоторых терминов из текстов. Для этих задач мне достаточно вычленить только значимый текст.

А для задач, где требуется ДОМ-модель (я сейчас прикинул) мне источник заранее известен будет, поэтому смогу индивидуально парсер настроить или код почистить. Не удобно, конечно, но выполнимо. А вот для поиска хотелось бы иметь универсальное, простое и быстрое решение.
boric вне форума   Ответить с цитированием
Старый 14.09.2010, 01:18   #8
Мастер
 
Аватар для Valentyn
 
Регистрация: 26.06.2007
Адрес: Ukraine
Сообщений: 652
Вес репутации: 231
Valentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордитсяValentyn - за этого человека можно гордится
Отправить сообщение для Valentyn с помощью ICQ
По умолчанию

в принципе, незакрытый тэг можно ограничить, встретив следующий открытый.

из ограниченого можно взять все слова, не совпадающие с тегами и стандартными атрибутами.
__________________
ab788932cee4ff449d2ec584da8af2b7 47fa7a5a72b89d8828985beec3a3c252
Valentyn вне форума   Ответить с цитированием
Старый 14.09.2010, 01:19   #9
Мастер
 
Аватар для jekky25
 
Регистрация: 30.04.2008
Сообщений: 525
Вес репутации: 213
jekky25 - просто великолепная личностьjekky25 - просто великолепная личностьjekky25 - просто великолепная личностьjekky25 - просто великолепная личностьjekky25 - просто великолепная личностьjekky25 - просто великолепная личностьjekky25 - просто великолепная личность
По умолчанию

Цитата:
Сообщение от justworker Посмотреть сообщение
по поводу вычленения текста, simple_html_dom это лучшее что я видел, работает быстро, но на кривом коде 100% споткнется
тоже с ним кстати работал. очень хорошая вещь.
jekky25 вне форума   Ответить с цитированием
Старый 14.09.2010, 01:51   #10
Эксперт
 
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
boric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущееboric - прекрасное будущее
По умолчанию

Valentyn,
Цитата:
в принципе, незакрытый тэг можно ограничить, встретив следующий открытый.

из ограниченого можно взять все слова, не совпадающие с тегами и стандартными атрибутами.
Я тоже в этом направлении сейчас думаю. Здесь главное не переборщить, чтоб много текста не выкидывалось.
boric вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уникализатор html кода Русская мафия Разработка и сопровождение сайтов 23 20.03.2010 15:40
Установка кода Sape на голый HTML. Вылазит часть кода barushk Вопросы от новичков 5 07.04.2009 08:14
Установка кода на HTML Nikko Установка кода на различные движки 2 06.04.2008 09:54
Оптимизация HTML кода ddvhouse Пожелания пользователей системы 8 16.06.2007 08:54


Часовой пояс GMT +3, время: 00:23.