LINUX.ORG.RU

скриптик обработки html

 , ,


0

1

Никто случайно не баловался sed'ом или awk или не писал однострочники на перле который вырезает из входного потока всё что находится между символами '<' и '>' (вместе с самими символами) и вставляя символ перевода строки после каждого блока, отдельно обрабатывая блок начинающийся строки «<a» выводя из этого блока всё что начинается с 'href=\«' и заканчивающийся ближайшим символом '\»', а так же дополнительно не выводящий всё что находится между «<script» и ближайшим «/script>» ну может быть ещё парочки тегов типа «style» и других не содержащих осмысленный текст

если приглядеться то получится упрощенный аналог links работающий только со стандартными утилитами

★★★

Ответ на: комментарий от anonymous

ставить целую библиотеку только ради того с чем легко справится не очень сложный регэксп? это как-то не спортивно

mm3 ★★★ ()
Ответ на: комментарий от Kalashnikov

ах если бы я только умел писать корректные регэкспы.... при попытке разобраться как их писать у меня начинает плавиться мозг

mm3 ★★★ ()
Ответ на: комментарий от mm3

А, ну с этого и надо было начинать. В общем-то однострочником тут скорее всего не обойдёшься, а в либе которая умеет дом можно просто взять document.body.innerText

Kalashnikov ★★★ ()
Ответ на: комментарий от Kalashnikov

в топике описаны достаточно чёткие и однозначные правила обработки входного потока, которые можно применить последовательно, только в обратном от описанного порядке, и какое из этих правил невозможно обработать однострочником?

mm3 ★★★ ()
Ответ на: комментарий от mm3

В теории - никакое. На практике скорее всего споткнёшься о вложенность, невалидность вёрстки и другие прелести. Хтмл нельзя парсить регэкспами.

Я щас парсю разметку вики, тоже казалось бы, правила простые, но однострочником мой велосипед никак не назовёшь...

Kalashnikov ★★★ ()
Ответ на: комментарий от gnunixon

не то чтобы уж очень нужен, но загорелся идеей сделать аналог html2text с использованием только sed (а больше и не нужно) для комфортного серфинга по сети там где в принципе невозможно поставить какие либо дополнительные библиотеки

и даже почти уже сделал но конструкция вида

 
sed 's/<script[^>]*>[^<][^\/][^s][^c][^r][^i][^p][^t][^>]*<\/script>//g'
упорно не желает вырезать скрипты

mm3 ★★★ ()

А мне мама в детстве говорила, что нельзя конечным автоматом обрабатывать тексты, порожденные контекстно-свободными грамматиками.

ugoday ★★★★★ ()
Ответ на: комментарий от ugoday

не мешайте человеку завтракать кактусом

mm3 ★★★ ()

Я бы сделал обработку текста в несколько этапов.
С начало вырезать из текста все script css...
Потом заменить все «<a href=»http://site.ru«>blablabla</a>» на «blablabla - http://site.ru"
А потом уже убрать все остальные теги, поставить переводы строки...

вставляя символ перевода строки после каждого блока

Если на регэкспах, можно попробовать заменять все </p>,</div>,<br> на \n. Остальные теги просто удалять.
Непонятно как быть с таблицами.

Общего решения для вех сайтов на одних только регэкспах не получится.

TDrive ★★★★★ ()
Ответ на: комментарий от Kalashnikov

Что это? Регэксп скорее должен быть таким:

а что в нём означает знак вопроса "?" !?! так для общего развития но в любом случае этот регэксп не отрабатывает, чтобы отвязаться от необходимости учитывать множественного вхождения тега </script> в строке проще разбить строку както так:

sed 's/<\/script>/<\/script>\n/g' | sed 's/<script.*<\/script>//g'

и вообще вот не причёсанный вариант:

wget -q -O - http://linux.org.ru | tr -d "\n\r\f" | sed 's/<!--[^-][^>]*-->//g' | sed 's/<script[^\/][^>]*\/>//g' | sed 's/<\/script>/<\/script>\n/g' | sed 's/<script.*<\/script>//g' | sed 's/<style[^\/][^>]*\/>//g' | sed 's/<\/style>/<\/style>\n/g' | sed 's/<style.*<\/style>//g' | sed 's/>/>\n/g' | sed 's/<[^>]*>//g' | sed '/^\s*$/d' | sed 's/\&[^\;]*\;/ /g'

вечерком попробую причесать и подумать над тегом <a>

mm3 ★★★ ()

Иди лучше xpath осиливать.

anonymous ()
Ответ на: комментарий от mm3

а что в нём означает знак вопроса "?"

Не жадная квантификация, тоесть .* остановится сразу как встретит первый </script>. На вики хорошо описано.

Kalashnikov ★★★ ()

С sed'ом разобрались, получив красивенький скриптик:

wget -q -O - http://linux.org.ru | sed ':a; /$/N; s/\n//; ta' | sed 's/<!--[^-][^>]*-->//g;s/\&[^\;]*\;/ /g;s/<script[^\/][^>]*\/>//g;s/<style[^\/][^>]*\/>//g' | sed 's/<\/script>/<\/script>\n/g;s/<\/style>/<\/style>\n/g;s/<br/\n<br/g;s/<\/div>/<\/div>\n/g;s/<a /\n<a /g;s/<\/a>/<\/a>\n/g' | sed 's/<script.*<\/script>//g;s/<style.*<\/style>//g;s/<a\(.*\)href=\"\([^\"]*\)\"\([^>]*\)>\(.*\)<\/a>/\4 \( \2 \)/g' | sed 's/<[^>]*>/ /g' | sed '/^\s*$/d;s/\ \{1,\}/ /g'
который отображает лор даже лучше FireFox'а (осталось только adblock прикрутить)

теперь можно и в AWK поковыряться

mm3 ★★★ ()
Ответ на: комментарий от mm3

Классика жанра

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

anonymous ()
Ответ на: комментарий от mm3

который отображает лор даже лучше FireFox'а

На тот случай, если ты все же не толстячок: w3m -dump -T text/html

anonymous ()

нельзя распарсить с помощью регулярных выражений нерегулярную грамматику. xml уже нерегулярный, не говоря уже про html.

dimon555 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.