LINUX.ORG.RU

perl-скрипт для удаления скрипто-мусора из html-страниц

 , ,


1

1

добрый день

наборосал скрипт, в первом приближении работает, чистит, вроде как, то, что надо ... :о)

посмотрите, какие могут быть подводные камни или что нужно подзакрутить в «настройках» скрипта?

скрипт для локального использования, обработка сохраненных страниц и последующего просмотра/чтива

спасибо за пендили :о)

#!/usr/bin/perl

use strict;
use HTML::Laundry;

my $file    ;
my $laundry ;
my $html    ;
my $html_clr;

$file = shift or die "need a file $!\n";

open (FH,"< $file"    );
read (FH, $html, -s FH);
close FH;

$laundry = HTML::Laundry->new();

$laundry->add_acceptable_element(['img','h1','h2','style','stylesheet','href',
'link','html','head','body','meta','title','div','span');

#
# <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
#
$laundry->add_acceptable_attribute(['http-equiv','content','charset']);

$html_clr = $laundry->clean($html);

open (OH, '>', $file);
print OH $html_clr   ;
close OH;

exit;

p.s. в модуле есть возможность использовать base_url, для более тонкой настройки, руки не дошли дотошно потестировать...

★★★★

Последнее исправление: sunjob (всего исправлений: 7)

$laundry->add_acceptable_element(['img','h1','h2','style','stylesheet','href',
'link','html','head','body','meta','title','meta']);

«Белый» список, а нужен «чёрный». С «белым» ничего толкового не получается! Сразу на вскидку - нет элементов div, span, вся «размётка» сразу в кашу превратится.

anonymous
()

навскидку: этот HTML::Laundry как относится к невалидным html? например, если тег не закрыт должным образом

bvn13 ★★★★★
()

Лучше консольные утилиты писать в юникс-стиле: чтобы читали stdin, писали в stdout, а при наличии опций брали ввод и писали вывод в указанные файлы.

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

да «это» вообще-то и не рассматривается как «ошибка», обычное «указание» того, что нет параметра... не более

а open/read/close - пусть отрабатываются «как обычно» :о) скрипт простой, это-же не военный завод...

или я не правильно понял направление мысли?

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

да, меня это самого интересует, но, как уже тут писал - по умолчанию это страшная мясорубка, т.е. можно предположить что «удаляет»

HTML::Laundry

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

это так думаешь до тех пока не прижмет / надо срочно сделать / есть более важные задачи итд...

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

ну а так, будут идеи - пишите, обсудим, может что и наклепается :о)

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

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

добавим в список [div, span]

спасибо

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

что нам надо сделать

Наверное внести в «белый» список. Гы-гы...

Я ж говорю: с «белым» списком фигня полная получается, а либ, умеющих «чёрный» список я не видел.

Если «жмёт», мож bash пошукать: https://github.com/BASH-Auto-Tools/bash-html-clean

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

что нам надо сделать с «5м элементом»?

Есть также идея «ободрать» html-сраницу, а уже из полученного списка повыкидывать «нежелательные».

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

если вы про «это»

<p><CENTER><img src="svet4800.gif" width="641" height="532" alt="" border="0">

то все нормально, эта строка не удалятеся (из тестов)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от anonymous

не совсем понятно что значить"ободрать"? :о)

в данном случае уже хорошо «обдирается» ... (потестируйте на «своих кошках», там виднее будет ...)

вот мой тестовый скрипт

#!/bin/sh
set -e; clear

HTM=page.htm

cp -fr bk/$HTM ./
./jscut.pl ${HTM}
cat ${HTM}; read
sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от anonymous

ну... вам виднее

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

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от sunjob

не совсем понятно что значить"ободрать"?

Это значит вытянуть из него список всех элементов на странице (почто то, что в «теме», но может быть и меньше и больше).

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

не сильно сложно для скрипторезки?

Одно дело - вырезать элементы script и iframe, а другое дело - пропустить страницу через «мясорубку». Разные вещи, разные...

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

ну дак попробуйте на ваших кошках, посмотрите как рубит, расскажете, что не так, по вашему мнению

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

т.е. это и есть тот самый пример «невалидного html кода»?

п.с. сейчас сохраню лоровскую страничку, гляну, на что обратить внимание ? (для меня главное - что бы читать было комфортно...)

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

на что обратить внимание ?

Сразу не вспомню, но стоит обратить на meta с кодировкой.

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

проверил на лоре, страницу не коробит, открывается мгновенно, размеры след.

-rw-r--r-- 1 sun users 57690 2019-10-21 01:41 01.bk.htm
-rw-r--r-- 1 sun users 45125 2019-10-21 01:41 01.htm

...

по поводу tidy что-то типа этого?

<tidy type="text/javascript" src="script.js" language="javascript">
</tidy>
--> как и предполагалось - срезали (а че? так ему и надо, нечЁ под невинную овечку косить...)

...

meta с кодировкой

то было одно из первых требований ... все нормально

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от sunjob

по поводу tidy что-то типа этого?

Гы-гы... tidy - тулза такая.

meta с кодировкой

Знать либо wget-ом не пользуешься, либо что-то поменялось.

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

tidy - у нас этих тайдей ну просто завались ... вот и шлем кому попало... конкретнее надо, конкретнее.. :о)

wget-ом не пользуешься ... так так, развивайте вашу мысль?!

sunjob ★★★★
() автор топика
Ответ на: комментарий от sunjob
$!

это системная ошибка, errno. Ее не будет в вашей конструкции никогда.

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

у нас этих тайдей ну просто завались

tidy - HTML syntax checker and reformatter

развивайте вашу мысль?!

wget-ом страницу скачай, хотя мож всё и изменилось.

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

В перле это несколько дополнительных строк. Ну и Getopt::Long вам в помощь.

level1 ★★
()
...([qw/
   element_a
   element_b
   ... # по алфавиту
/]);
level1 ★★
()
Ответ на: комментарий от anonymous

What is Tidy?

Tidy is a console application for Mac OS X, Linux, Windows, UNIX, and more. It corrects and cleans up HTML and XML documents by fixing markup errors and upgrading legacy code to modern standards.

libtidy is a C static and dynamic library that developers can integrate into their applications in order to bring all of Tidy’s power to your favorite tools. libtidy is used today in desktop applications, web servers, and more.

-->

не, ну это уже слишком... :о)

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

тег не закрыт должным образом

удаляется ...

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

ну как-бы... дядя фрейд тут не причем

эта утилитка на моей старенькой машинке (основной) собирается весьма странно, то вася, то не вася... (обычно софт перестает собираться после какой то версии... а тут все через раз, поэтому и отношение к этому «поделию» странное... если уж собирается оно так :o)

p.s. из всех релизов у меня нормально собрались лишь эти

5.0.0
5.1.8
5.1.24
5.1.25
5.7.28

ну а так... смотрит, выдает лог/отчет о найденных ошибках (и чЁ?!, как сказал бы пушкин)

line 1 column 1 - Warning: missing <!DOCTYPE> declaration
line 9 column 1 - Error: <tidy> is not recognized!
line 9 column 1 - Warning: discarding unexpected <tidy>
line 10 column 1 - Warning: discarding unexpected </tidy>
line 12 column 1 - Warning: <link> missing '>' for end of tag
line 26 column 11 - Info: value for attribute "border" missing quote marks
line 26 column 11 - Info: value for attribute "width" missing quote marks
line 26 column 11 - Info: value for attribute "height" missing quote marks
line 29 column 11 - Info: value for attribute "border" missing quote marks
line 29 column 11 - Info: value for attribute "width" missing quote marks
line 29 column 11 - Info: value for attribute "height" missing quote marks
line 33 column 10 - Error: <noindex> is not recognized!
line 33 column 10 - Warning: discarding unexpected <noindex>
line 36 column 85 - Error: <noindex> is not recognized!
line 36 column 85 - Warning: discarding unexpected <noindex>
line 39 column 85 - Error: <noindex> is not recognized!
line 39 column 85 - Warning: discarding unexpected <noindex>
line 7 column 4 - Warning: missing </center>
line 26 column 11 - Warning: <img> lacks "alt" attribute
line 29 column 11 - Warning: <img> lacks "alt" attribute
line 7 column 1 - Warning: trimming empty <p>
line 20 column 1 - Warning: trimming empty <script>
line 24 column 1 - Warning: trimming empty <script>
line 7 column 4 - Warning: <center> element removed from HTML5
line 31 column 1 - Warning: <center> element removed from HTML5
line 36 column 1 - Warning: <center> element removed from HTML5
line 39 column 1 - Warning: <center> element removed from HTML5
Info: Document content looks like HTML5
Tidy found 17 warnings and 4 errors!

особенно вот это :о)

This document has errors that must be fixed before
using HTML Tidy to generate a tidied up version.

и это на 5ти строчном тестовом файле :о)

покупка компьютера поможет вам решить проблемы, которые у вас появятся с покупкой компьютера...

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от sunjob
This document has errors that must be fixed before
using HTML Tidy to generate a tidied up version.

Ну ты же сам просил невалидную страницу. Теперь ты знаешь, что она у тебя есть. :)

PS: Я собстна tidy только для валидации и пользую.

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

да не, мы, по моему, о разном

мне не понравилось то

- что до этого уже не понравилось (нестабильная сборка)

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

ну т.е. определенно не наш случай...

наш случай - натравливаем на htm наш скрипт и получаем смотрибельно-безопасный файл (а то, что он до этого и, возможно сейчас содержит ошибки - мне, думаю и вам, в данном случае по барабану, нам что надо? мы это получили, а ковыряться в мозгах - это пусть мысли этим занимаются и музы :о)

надеюсь мымсль денес до состояния «ясного понимания» что мы делаем, что получаем, а что в данном случае является неоптимальным

ну а так, спасибо за пендили во всяких направлениях :о)

sunjob ★★★★
() автор топика

Во-первых, зачем? Если тебе не надо исполнять скрипты, то можно просто отключить их исполнение. У тебя не будет работать приличный процент сайтов в интернете, но это уже твои проблемы. Во-вторых, ты даже html не знаешь, а чего-то чистить собрался. В-третьих, если тебе надо более читаемый текст на странице (ничего лишнего), то как раз наоборот, нужно писать свои скрипты и свои стили.

Wizard_ ★★★★★
()

а в чём смысл чистки? а то есть подозрение, что твой скрипт половину интернета удалит. сейчас стало немодно писать страницы без ошибок :)

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

скрипт для локального использования, обработка сохраненных страниц и последующего просмотра/чтива

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

емнип, jsp не допускает выдачи невалидного html

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