![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| 12345c |
|
||||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Появилась идея сделать механизм, автоматизирующий вытаскивание полезной информации из html. Скажем, имеем мы в описании справочника очень похожие структуры данных вида
Есть задача вытащить всю полезную информацию, по ходу игнорируя лишние пробелы и переносы. Превратить всё в упорядоченный поток вида
|
||||
|
|||||
| JSman |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
есть объекты FSO и др. с ними можно генерить новую страницу через JS.
тебе нужно проходить по дереву, "правильно" собирать innerText каждого тэга. а свойства тэга можно получить for in. а в чем, собственно, сложности? регулярные выражения могут даже не понадобиться. если хочешь делать без Delphi и др., то простой и удобный вариант на HTA. но опять же, ты встретишься с утечкой памяти и косяками JS |
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
FSO не надо, потому что часть декодирования должна работать везде, как обычный компонент скрипта.
Вопрос в том, чтобы наглядно описывать выбрасываемые части страницы и сделать достаточно общее решение, чтобы встраивать его. Кодирующую часть делать всё равно на чём, но лучше на кросссистемных скриптах. JS вполне способен это осилить. Важно, чтобы потом поменьше программировать. Может, пойти от конца - создания шаблона? Берём образец страницы, заменяем в ней поля переменных на вставки переменных типа <...> или <span class=...>, вставляем учитываем возможность пробелов и переносов где угодно - и вперёд. |
|||
|
||||
| JSman |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
хорошо, можно образец сунуть в переменную и использовать в скрипте. понятно.
я думаю, что стоит определиться с форматом шаблона для облегчения поиска с использованием RegExp. !TAGNAME! [ attr = ... ; ... ] но тут возникает вопрос: полезная информация - эта та информация, без использования лишних тэгов и атрибутов типа STYLE? имеет ли смысл придумывать новый формат для последующего создания той же страницы только без мусора? а говоря о кроссбраузерности, то мне кажется, что лучшим решением будет генерить сценарий, содержащий в себе массив, состоящий из дочерних массивов. var IMG = [["SRC","значение"],["ALIGN", "top"] ]; очень легко оттуда извлекать информацию и записывать. |
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Да, это вся сухая информация без украшений и тегов, которую потом в новой генерации страницы оформим по-своему. Это автоматизированный извлекатель информации с группы похожих страниц или из одной большой с повторяющимися элементами.
К массиву я тоже прихожу, но ещё более эффективно хранить в строке или столбике, где переносы строк вместо запятых, а кавычки отсутствуют. Потом её легко переводим в многомерный массив. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
12345c, не понял в чём вопрос...
Собрать документ по шаблону с файла что ты привёл есть дело 10 минут кодинга на PHP. Обраное преобразование (с целого документа в инфу) потребуеться знание шаблона, что тоже просто если перед парсингом шаблон известен. Другой вопрос: а нафига? ты .htm документы справочника в что то другое конвертишь или индексы делаешь? -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Вопроса насущного нет, есть желание выработать методы, алгоритмы преобразований и достаточно наглядное представление шаблонов. Чтобы не кодировать каждый раз заново, а пользоваться методами.
Обратная задача (извлечение инф-ы из разметки) нужна, чтобы доставать инф-у из разных htm-страниц, утяжелённая вольностью ручной кодировки этих страниц разными авторами и верстальщиками. Тоже нужен набор методов, чтобы применять при таком подходе, для автоматизации процесса и для перевода информации в своё представление, со своей разметкой. Задача пригодится и при парсинге веб-контента для разных целей. Конечно, предполагаю решение её полуавтоматическим, в диалоге с человеком, который показывает существенное и правила вольностей верстальщиков, а автомат несётся дальше, до следующего места непонимания. Вчера, например, по задаче синтеза html придумал такую вещь, как встраивание кода в шаблон, чтобы потом его исполнять в циклах по eval(). |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Ну было дело, по шаблону генерить страницу: http://forum.vingrad.ru/index.php?showtopic=34621
А вот анализ страницы, это уже другое. Если структуру мы вообще не знаем, то приплываем к классическому вопросу "что было раньше курица или яйцо?"
И что это получилось? Браузер сам может без всяких eval выполнить код в странице, зачем каким то путём доставать верстку со скриптами в переменную, из которой затем вырезать скрипты и выполнять как в шаблонизаторе? В prototype.js есть такая фича, но не врубаюсь где можно это заюзать (мой разум свободен от каких либо паттернов мышления, я сейчас вижу как минимум 2 более красивых решения для подобного функционала, а если задача станет точней, то и решения будут лучше). Не, ну конечно нет предела изврату... Резюмирую: какова задача? Я пока вижу три направления:
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| JSman |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
довольно странно... если мы видим банеры, то работаем с IMG или IFRAME. а так вся разборка текста идет по P, DIV, SPAN, ну списки и прочее в том же духе. и то SPAN нужен, в принципе, только для указания стиля. DIV тоже спорный вариант - украшательства через прямоугольники...
тогда это все наводит на мысль: причем тут "супер разум"? по-моему цель должна сводится к выделению контента без банеров, где текст классически состоит из P, BR, SPAN, A, списков, элементов управления.. по-моему красота проги будет в разграничении HTML, CSS, JSCRIPT.. управление отображением содержимого - через CLASS. новый формат не нужен... нужно просто очистить контент от изображений маленького размера, ссылающихся на другой хост, убрать украшательства и поставить вместо них CLASS в тэге STYLE и присодинять события по ONLOAD в отдельном скрипте. говоря о сказанном выше, красота декодирования не нужна особенно в JSCRIPT .. мы сразу сформируем основу. от нее отталкиваемся и меняем стиль содержимого через CSS. даже массив со своей многомерностью не нужен. если я прав, то деятельность сведется лишь к кодированию на JSCRIPT нового контента без вольностей опять же через FSO и вообще HTA. Это сообщение отредактировал(а) JSman - 25.8.2006, 00:17 |
|||
|
||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Он может ответить на вопрос: что тебе нужно Если мне нужна инфа, то я примерно понимаю как выглядит эта инфа, следовательно пишеться по быстрому анализатор первого типа, либо в редких случаях анализатор второго типа. Повторяю: ты знаешь какую инфу ты хочешь получить и как её достать, ты не отдаёшь "выделение" на откуп софту.
К сожалению не всё в вебе оформлено в виде офисных документов, чаще свёрстано на таблицах с жуткими заморочками. Поисковики ориентируються на количество текста для индексации. Ещё картинки ассоциируються с рядом стоящим текстом, так ты можешь "искать картинки".
Это простой анализатор, в DOM дереве всё раздельно. А вот написать конвертор любой кривой вёрстки в красивую структуру со стилями, да так что визуально во всех браузерах будет одинакого и не отличаться от оригинала... не, памятник при жизни точно народ поставит Нафлеймил Подробней на этом моменте, как "сразу сформируем основу"? Возьми страницу yandex.ru к примеру, убедись что там масса мелких картинок, баннерами не являющиеся. Можно посмотреть исходники adblock под лису, они открыты, алгоритм бывает лажает но не часто. Но! из общего абстрактного анализатора контента предложенного 12345c ты сейчас предлагаешь делать банерорезалку -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| JSman |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
итак, я предлагаю сделать на первом этапе "банерорезалку" и то, что разграничит контент в страниц е на JSCRIPT, CSS, HTML. а потом будем бороться с "неправильной" версткой.
Добавлено @ 02:14 1й этап - разграничение на 3 логических части. 2й этап - нахождение одинаковых стилей для разных тэгов (например отступы параграфа) 3й этап - поиск альтернативы последовательности тэгов. Добавлено @ 02:24 дополнения между 1м и 2м этапом: "банерорезалка". по 2му этапу: будем создавать классы и вписывать общие inline-стили. а location.href включает .yandex - это этап №1
на TABLE как я понял, чтобы не спутал с CSS |
|||
|
||||
| JSman |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
тэгов
Добавлено @ 02:28 блин, ну если реально сделать эту штуку, то ващще будет Добавлено @ 02:32 ребят, я советую сделать на HTML, а не PDF и тд - помучаемся, зато итог классный: мало весит, код красивый - ай, сказка и JSCRIPT впихнем в реализацию кодирования |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Сейчас придёт 12345c и будет нас матом крыть за испохабленную идею Во вторых, форум != чат, пиши в одном посте
Вижу ты мало верстал. Можно написать рендер страницы, не графический естественно, мне на первый взгляд на Java уйдёт от силы 2 месяца (для JS можно Rhino прикрутить + стандартные браузерные обьекты). Рендер будет "рисовать" вёрстку в нечто промежуточное со стилями, как это делает браузер. Фактически <p>, <i> и прочие элементы это всё один элемент с разными стилями "по умолчанию". НО! возникнут проблемы:
В PDF хорошо тем, что рендерит с well-defined XSL-FO, всегда можно тыкнуть пальцем и сказать "ламо написали глюкавый рендер", в отличии от браузеров, которые рождены много раньше чем стандарты которые они должны поддерживать. Конечно результаты представляют чисто научный интерес, ибо в жизни ты с этими PDF'ками... хотя из XSL-FO легко HTML+CSS генерить. Долго думал... собери мысль по новой -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| JSman |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
кстати, он кажется забил уже на нее ))))) не видно его! нечаянно! просто ночью мысль в голове била!
согласен, но она прикрепляется через атрибуты-события ( ONCLICK="...") - можно присоединить ID и сделать по загрузке attachEvent/addListener либо просто присвоить событию функцию напрямую. проблем нет! дизайн дизайном, верстка - нечто отдельное. ну не скажи.. вот недавно я пришел на фирму, меня попросили переверстать страницы сделанные на frontpage (сколько мусора было! ужас!)! вот эта программа бы понадобилась. а так вручную минут 5 потратил! 12345c тоже хочет. . ну шо вы такое говорите. понятное дело, что будем учитывать поддержку различных браузеров. 1й этап предлагаю сделать на JSCRIPT ради приличия хоть... товарищи, форум-то джаваскриптовый! анализаторы, анализаторы... графический не нужен. забадаемся, и вообще гибельное дело. разборы на прямоугольники, смотреть что куда сместить.. не стОит. лучше думать над удалением ненужных стилей, изменении существующих, объединении. моя точка зрения состоит в том, что анализатор кода совершенней анализатора графики. |
||||
|
|||||
| Sardar |
|
||||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Я не про привязку по ID. Например сейчас нет в JS нормального XPath (пинать ленивых разработчиков браузера, и совсем презирать ламов из ECMA, не шевеляться), следовательно приходиться перебирать ноды в ручную. Следовательно ожидаешь что какие то ноды существуют и где они находяться. А тут раз разметка поменялась, скрипты слетели. Зри глубже Я бы сказал "обьясни это 80% всех верстальщиков", но не смогу, т.к. сам верстаю с извратами. Почему? Потому что сначала верстаешь хорошо по стандартам, а потом подгоняешь напильником под все браузеры, вот тогда она самая серемяжная правда наружу и вылезает
Тут сложней анализ будет, front page отстойно вещи на абсолютную позицию ставить любит, следовательно нужно как то проецировать на документ и вгонять в поток документа с нормальными стилями. А это очень даже не простая задача...
А иначе как вынести стили? Выкладывай свою идею
JSman, давай поменьше бравады и больше здравых мыслей, взрослые же люди всё таки -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||||
|
|||||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |