Вырезать html-форматирование из документа

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
radial
Сообщения: 577
ОС: OpenSUSE

Вырезать html-форматирование из документа

Сообщение radial »

Первое, что приходит в голову- это
cat site.html | awk -F '<*>' '{print}'

но конечно не работает :)
Вопрос "регулярные выражения в разделителе полей AWK" на мой взгляд незаслуженно обойден вниманием во всяких хау-ту, поэтому ничего и не нашел. Насчет этой строки- как правильно записать?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Вырезать html-форматирование из документа

Сообщение SLEDopit »

radial писал(а):
22.05.2010 06:17
Насчет этой строки- как правильно записать?

Код: Выделить всё

sed 's/<[^>]*>//g' site.html
непосредственно с помощью awk:

Код: Выделить всё

awk '{gsub(/<[^>]*>/,"")};1' site.html
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Вырезать html-форматирование из документа

Сообщение drBatty »

radial писал(а):
22.05.2010 06:17
Вопрос "регулярные выражения в разделителе полей AWK" на мой взгляд незаслуженно обойден вниманием во всяких хау-ту, поэтому ничего и не нашел. Насчет этой строки- как правильно записать?

потому-что это задача для sed. и рассмотрена она например здесь.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
radial
Сообщения: 577
ОС: OpenSUSE

Re: Вырезать html-форматирование из документа

Сообщение radial »

SLEDopit
с помощью AWK- совсем страшно выглядит. я думал, что будет наоборот.
Да, спасибо.

drBatty , "здесь" не открывается. Да и не нравится мне sed- у awk хоть синтаксис человекоориентированный.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Вырезать html-форматирование из документа

Сообщение sash-kan »

radial
может быть, такое больше подойдёт:
$ w3m -dump file.html | less
$ lynx -dump -nolist file.html | less
?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
radial
Сообщения: 577
ОС: OpenSUSE

Re: Вырезать html-форматирование из документа

Сообщение radial »

О, пасибо.
это тоже отлично, даже не думал о таком варианте. Единственное, что интересует- вопрос быстродействия этого метода (хочу использовать в скриптах).
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Вырезать html-форматирование из документа

Сообщение SLEDopit »

radial писал(а):
22.05.2010 16:14
Единственное, что интересует- вопрос быстродействия этого метода (хочу использовать в скриптах).
в данном случае awk самый быстрый:

Код: Выделить всё

 $ ls -lh coreutils.html
-rw-rw-r-- 1 www-data user 1.3M Apr 27 20:30 coreutils.html
 $ wc -l coreutils.html
17414 coreutils.html
 $ time for i in `seq 100`; do w3m -dump coreutils.html > /dev/null; done

real    0m38.289s
user    0m33.890s
sys    0m3.096s
 $ time for i in `seq 100`; do sed 's/<[^>]*>//g' coreutils.html > /dev/null; done

real    0m17.127s
user    0m16.269s
sys    0m0.444s
 $ time for i in `seq 100`; do awk '{gsub(/<[^>]*>/,"")};1' coreutils.html > /dev/null; done

real    0m5.808s
user    0m5.256s
sys    0m0.404s
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Вырезать html-форматирование из документа

Сообщение t.t »

radial писал(а):
22.05.2010 14:46
с помощью AWK- совсем страшно выглядит.

radial писал(а):
22.05.2010 14:46
не нравится мне sed- у awk хоть синтаксис человекоориентированный.

(:
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
radial
Сообщения: 577
ОС: OpenSUSE

Re: Вырезать html-форматирование из документа

Сообщение radial »

t.t писал(а):
22.05.2010 17:08
radial писал(а):
22.05.2010 14:46
с помощью AWK- совсем страшно выглядит.

radial писал(а):
22.05.2010 14:46
не нравится мне sed- у awk хоть синтаксис человекоориентированный.

(:


не-не. я про представленный тут вариант- "страшно выглядит". но пока я не разобрался в вопросе сам- я не считаю, что это единственный вариант на AWK.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Вырезать html-форматирование из документа

Сообщение t.t »

radial писал(а):
22.05.2010 18:16
t.t писал(а):
22.05.2010 17:08
radial писал(а):
22.05.2010 14:46
с помощью AWK- совсем страшно выглядит.

radial писал(а):
22.05.2010 14:46
не нравится мне sed- у awk хоть синтаксис человекоориентированный.

(:
не-не. я про представленный тут вариант- "страшно выглядит". но пока я не разобрался в вопросе сам- я не считаю, что это единственный вариант на AWK.
Да нет, я всё понял. Я о том, что есть категории задач, для которых sed поджодит куда лучше, чем awk; и удаление частей текста по таким критериям -- одна из них. Нет, я даже допускаю, что Вы придумаете вариант решения на awk, который будет почти не страшнее уже приведенного на sed. Вот только сколько это у Вас займёт времени?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
radial
Сообщения: 577
ОС: OpenSUSE

Re: Вырезать html-форматирование из документа

Сообщение radial »

awk -F '<[^>]+>' '{ for (i = 1 ; i <= NF; i++) print $i }' site.html

- я что-то такое подразумевал под записью по-человечески в AWK
Т.е. я даже не формулирую задачу как "удалить подстроку"- скорее как "определить разделитель". Просто sed не знает, что такое разделитель, в отличие от awk. Кому что удобнее...
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Вырезать html-форматирование из документа

Сообщение SLEDopit »

radial писал(а):
22.05.2010 20:14
я что-то такое подразумевал под записью по-человечески в AWK
простите, но это извращение. regex'ы для того и придумали, чтобы каждый раз велосипед не изобретать.
и, кстати, ради интереса сравните производительность варианта с regex и без него.

да и потом ничего страшного в sed'e нет. вот malbolge - страшно (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
radial
Сообщения: 577
ОС: OpenSUSE

Re: Вырезать html-форматирование из документа

Сообщение radial »

SLEDopit писал(а):
22.05.2010 20:46
простите, но это извращение

С точки зрения awk- это не извращение, а простенький, рядовой пример программы (не мне вам рассказывать, какие проги бывают для awk). А вопрос правомерности использования awk для этой задачи- это уже несколько другой вопрос.

К примеру, данный код проще модифицировать, если придется усложнить задачу- к примеру: вырезать весь html и распечатать какое-то специфическое поле.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Вырезать html-форматирование из документа

Сообщение drBatty »

radial писал(а):
22.05.2010 20:14
Т.е. я даже не формулирую задачу как "удалить подстроку"- скорее как "определить разделитель". Просто sed не знает, что такое разделитель, в отличие от awk. Кому что удобнее...

sed знает, что такое разделитель. точнее понятие "разделитель" там намного шире, и именно по этой причине sed больше подходит к обработке текстов, которые не являются таблицами. а HTML не является.
SLEDopit писал(а):
22.05.2010 16:20
в данном случае awk самый быстрый:

ИМХО самой быстрой тут будет специализированная программа на нормальном языке который вы знаете идеально.
а у вас тест не корректный - что будет для такого файла

Код: Выделить всё

<
html
>
<body>ts
sss
</body></html>

?
жаль, но такая гадость часто попадается на практике. и что будет с CSS и javascript?

ЗЫЖ странно - гугл мну видит, а вы - нет :(

radial писал(а):
22.05.2010 20:58
А вопрос правомерности использования awk для этой задачи- это уже несколько другой вопрос.

скорее - целесообразности...
radial писал(а):
22.05.2010 20:58
К примеру, данный код проще модифицировать, если придется усложнить задачу- к примеру: вырезать весь html и распечатать какое-то специфическое поле.

сложнее :)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
minoru-kun
Сообщения: 621
ОС: Debian GNU/Linux

Re: Вырезать html-форматирование из документа

Сообщение minoru-kun »

drBatty писал(а):
22.05.2010 21:06
жаль, но такая гадость часто попадается на практике. и что будет с CSS и javascript?

Вот поэтому и нужно использовать w3m. На bash/sed/awk будет слижком уж громоздко.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Вырезать html-форматирование из документа

Сообщение drBatty »

minoru-kun писал(а):
22.05.2010 21:10
Вот поэтому и нужно использовать w3m. На bash/sed/awk будет слижком уж громоздко.

да, но мне больше нравится мой подход. он более гибкий.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Вырезать html-форматирование из документа

Сообщение SLEDopit »

drBatty писал(а):
22.05.2010 21:06
а у вас тест не корректный - что будет для такого файла
ну останется часть тегов (:
drBatty писал(а):
22.05.2010 21:06
ИМХО самой быстрой тут будет специализированная программа на нормальном языке который вы знаете идеально.
я сравнивал лишь 3 предложенных вариант.
drBatty писал(а):
22.05.2010 21:06
ЗЫЖ странно - гугл мну видит, а вы - нет :(
ну в гугле же кеш, а вот у нас не открывается
minoru-kun писал(а):
22.05.2010 21:10
На bash/sed/awk будет слижком уж громоздко.
а на w3m слишком долго (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Вырезать html-форматирование из документа

Сообщение sash-kan »

drBatty писал(а):
22.05.2010 21:06
странно - гугл мну видит, а вы - нет
ну, «лежал» сайт, чего тут необычного?

p.s. я до него тоже достучаться утром не смог.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Вырезать html-форматирование из документа

Сообщение eddy »

А что это никто до сих пор не вспомнил html2text?
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Вырезать html-форматирование из документа

Сообщение SLEDopit »

sash-kan писал(а):
22.05.2010 21:38
ну, «лежал» сайт, чего тут необычного?

p.s. я до него тоже достучаться утром не смог.
ну просто лежит он до сих пор..
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Вырезать html-форматирование из документа

Сообщение drBatty »

SLEDopit писал(а):
22.05.2010 21:33
ну останется часть тегов

э... ИМХО есть 2 разные задачи:
1)вырезать почти все теги.
2) вырезать все теги.
Какую решаем?
SLEDopit писал(а):
22.05.2010 21:55
ну просто лежит он до сих пор..

вот это-то и странно... глядя от меня - всё ок... наверняка я опять какие-то настройки накрутил :(
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Вырезать html-форматирование из документа

Сообщение sash-kan »

drBatty
из четырёх разных точек (спб, мск) последними откликнувшимися получаются гейты одного и того же провайдера:

Код: Выделить всё

 7  ae2.20g.t1600-2-210.nwtelecom.ru (212.48.198.249)  5.562 ms ae2.20g.t1600-2-mmt.nwtelecom.ru (212.48.194.94)  11.632 ms  11.624 ms
 8  ae1.20g.t1600-1-mmt.nwtelecom.ru (212.48.194.98)  11.604 ms ae0.20g.t1600-1-210.nwtelecom.ru (212.48.198.254)  11.593 ms  11.576 ms

Код: Выделить всё

 8  ae2.20g.t1600-2-mmt.nwtelecom.ru (212.48.194.94)  24.391 ms ae2.20g.t1600-2-210.nwtelecom.ru (212.48.198.249)  23.996 ms  23.990 ms
 9  ae1.20g.t1600-1-mmt.nwtelecom.ru (212.48.194.98)  23.450 ms  23.438 ms  23.521 ms

Код: Выделить всё

 6  ae2.20g.t1600-2-mmt.nwtelecom.ru (212.48.194.94)  2.441 ms ae2.20g.t1600-2-210.nwtelecom.ru (212.48.198.249)  1.868 ms ae2.20g.t1600-2-mmt.nwtelecom.ru (212.48.194.94)  2.775 ms
 7  ae0.20g.t1600-1-210.nwtelecom.ru (212.48.198.254)  3.137 ms ae1.20g.t1600-1-mmt.nwtelecom.ru (212.48.194.98)  3.052 ms  1.243 ms

Код: Выделить всё

 5  ae2.20g.t1600-2-mmt.nwtelecom.ru (212.48.194.94)  12.617 ms  12.629 ms ae2.20g.t1600-2-210.nwtelecom.ru (212.48.198.249)  12.520 ms
 6  ae1.20g.t1600-1-mmt.nwtelecom.ru (212.48.194.98)  12.675 ms ae0.20g.t1600-1-210.nwtelecom.ru (212.48.198.254)  13.405 ms ae1.20g.t1600-1-mmt.nwtelecom.ru (212.48.194.98)  12.568 ms
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Вырезать html-форматирование из документа

Сообщение SLEDopit »

drBatty писал(а):
23.05.2010 00:47
Какую решаем?
ну вроде как вторую (:
хотя, на самом деле, обычно парсят не для того, чтобы голый текст получить, а для того, чтобы получить определенную его часть. поэтому я никогда не удалял все теги. и очень часто удалял все переносы строк.
и кстати, насчет w3m:

Код: Выделить всё

 $ cat 1.html
<
html
>
<body>ts
sss
</body></html>

 $ w3m -dump 1.html
< html > ts sss

sash-kan писал(а):
23.05.2010 01:57
из четырёх разных точек (спб, мск) последними откликнувшимися получаются гейты одного и того же провайдера
подтверждаю. у меня так же.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Вырезать html-форматирование из документа

Сообщение drBatty »

SLEDopit писал(а):
23.05.2010 02:06
а для того, чтобы получить определенную его часть. поэтому я никогда не удалял все теги. и очень часто удалял все переносы строк.

беда в том, что все консольные утилиты работают построчно, и время обработки строчек размером 10-50К достаточно велико... Потому удалять все переводы строк не получается (очень медленно). Но анализировать надо всё - вы же не хотите, чтоб ваш скипт выдёргивал нужное не из HTML, а из включённого в него javascript'а? Или - из комментария.
я обычно первым делом переразмечаю html, что-бы теги были в начале строк

Код: Выделить всё

#!/bin/sed -rnf

# форматирование HTML, все теги собираются
# каждый в свою строку

# загрузка первой строки...
# удаление ведущих пробелов
s/^\s+//
/^</{
     # данная строка начинается с тега
    :tag
    />/{
        s/^[^>]*>/\L&\n/
        P
        D
    }
    # строка содержит не целый тег
    $ b error
    N
    s/\r?\n/ /
    b tag
}

/</{
    # строка не начинается с тега, но, однако, его содержит
    s/\s*</\n</
    P
    D
}

# проверяем наличие символа > вне тегов
/>/ b error

s/\s+$//
# проверяем, не является-ли строка пустой, и печатаем её
/^$/! p
b

:error
s/.*/\x1b[31;1mErorr in line '&'\x1b[0m/p
q 77


Хотя на практике обычно сначала лучше вырезать то, что точно не нужно (например комментарии) - объём резко падает, и скорость сильно увеличивается.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
radial
Сообщения: 577
ОС: OpenSUSE

Re: Вырезать html-форматирование из документа

Сообщение radial »

Чуточку от себя: моя задумка была в том, чтобы можно было выдирать куски текста из страницы, открытой в Firefox, и сохранять их с определенными атрибутами (URL, название сайта, и т.д.) в текстовый файл, который потом легко обработать средствами bash. Собственно, все варианты, описанные тут, были очень полезны, но я решил ее несколько иначе- банальной отправкой выделенного текста в скрипт. Остальные (нужные мне) параметры туда передает дополнение к браузеру. Но прочие варианты тоже весьма полезны.
Спасибо сказали:
Аватара пользователя
Davinel
Сообщения: 481
ОС: Ubuntu

Re: Вырезать html-форматирование из документа

Сообщение Davinel »

убирать html форматирование с помощью regex - плохая идея.
вообще regex подходит для того, чтобы вынуть какую то конкретную часть текста - это вполне.
а вот парсить html теги - совсем не подходит.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Вырезать html-форматирование из документа

Сообщение drBatty »

Davinel писал(а):
26.05.2010 05:29
убирать html форматирование с помощью regex - плохая идея.

это почему?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Вырезать html-форматирование из документа

Сообщение /dev/random »

drBatty писал(а):
26.05.2010 05:42
это почему?

HTML не описывается классическими регекспами. Нечто, напоминающее тег, может находиться в комментарии, в скрипте. Существует также набор "допустимых" ошибок в HTML, которые корректно обрабатываются браузерами и часто встречаются на страницах (например, незакрытая кавычка. Слабо из регекспа понять, когда человек кавычку забыл закрыть, а когда знак ">" и должен находиться в кавычках?). Регекспами (классическими) можно обрабатывать HTML только в том случае, если точно и безоговорочно известно, что будет на входе. Шаг влево, шаг вправо - расстрелчушь на выходе. В некоторых случаях - опасная с точки зрения уязвимостей чушь. PCRE, правда, в отличие от классических регекспов, достаточно навороченные, чтобы написать на них безопасный парсер HTML, но такое выражение займёт несколько печатных страниц мелким шрифтом.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Вырезать html-форматирование из документа

Сообщение drBatty »

/dev/random писал(а):
26.05.2010 06:25
Слабо из регекспа понять, когда человек кавычку забыл закрыть, а когда знак ">" и должен находиться в кавычках?

не слабО. хотя да, сложно...
/dev/random писал(а):
26.05.2010 06:25
PCRE, правда, в отличие от классических регекспов, достаточно навороченные, чтобы написать на них безопасный парсер HTML, но такое выражение займёт несколько печатных страниц мелким шрифтом.

и чем-же опасен мой парсер? (см выше). К тому-же я не знаю, зачем нужны тут PCRE, ИМХО вполне возможно и без них. Кстати, разве в HTML допустимо использовать ">" вроде нельзя даже в кавычках.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Вырезать html-форматирование из документа

Сообщение t.t »

tt:~$ aptitude show sgrep | sed -n /Описание:/,//p
Описание: tool to search a file for structured pattern expressions.

Like grep, sgrep can be used for any kind of text files. However it is most useful for text files containing some kind of structured text. A file containing structured text could be defined as a file, which obeys some syntax.
Examples of structured text files are SGML, HTML, C, TeX and mail files.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: