LinuxForum.Fans
Тема

Использование Privoxy для распечатки веб-документов.

Автор: da_Vinci 4 сообщений 3152 просмотров
#134727

Хочу показать вам возможности фильтрующего, при помощи pcre, веб-прокси - Privoxy, а то при его упоминании на linux форумах в ответ слышишь: "не нужно, bfilter режет банеры ис каропки".
К примеру мы хотим почитать и распечатать книжку Linux для пользователя на сайте citforum.ru.

Чтение на маленьких экранах не удобно из-за дизайна сайта, про распечатку лучше не говорить вообще.
Вот как выглядит сделанный мной privoxy фильтр для этого сайта:

text

FILTER: citforum.ru-print-m
s@\
(<body[^>]*>)\
.+\
<!--B2BCONTEXT_CONTENT_BEGIN-->\
(.+)\
<center><!--  AdRiver code START\. Type:468x60 Site: citforum PZ: 0 BN: 1 -->\
.+\
</body>\
@\
$1\
\n<!-- privoxy begin -->\n\
$2\
\n<!-- privoxy end -->\n\
</body>\
@sig

добавляем это в /etc/privoxy/user.filter
Теперь разберём детально.
FILTER: citforum.ru-print-m - объявление в privoxy фильтра с названием "citforum.ru-print-m"
Фильтруется содержимое тега body, остальное без изменений.
Сам фильтр имеет структуру вида s@шаблон@подстановка@sig, для наглядности я разбил его на строки, добавив перед каждым переносом символ \.

  1. (<body[^>]*>) - Ищем начало тега body и запоминаем его для последующей вставки в результат, всё что внутри () запоминается, [^>]* - означает любые символы кроме >, остальное обычный html код.
  2. .+ - Любые символы, всё это будет вырезано.
  3. <!--B2BCONTEXT_CONTENT_BEGIN--> - Расположено перед нужным для нас текстом, скопировано из html без изменений, также всё вырезается.
  4. (.+) - Тоже, что и .+ с запоминанием результата, содержит интересующий нас текст в полном объёме.
  5. <center><!-- AdRiver code START\. Type:468x60 Site: citforum PZ: 0 BN: 1 --> - Расположено после нужного нам текста, взято из html, . заменена на \. из-за того, что . является regexp инструкцией обозначающей любой символ, всё вырезается.
  6. .+ - Смотрите выше.
  7. </body> - Ищем закрывающий тег для body, код html без изменений, вырезается.

Теперь подстановка.

  1. $1 - Вставляем body.
  2. \n<!-- privoxy begin -->\n - Вставляем html комментарий для отладки, можно не делать.
  3. $2 - Вставляем интересующий нас текст в полном объёме.
  4. \n<!-- privoxy end -->\n - Смотрите выше.
  5. </body> - Закрываем body.

Вот и всё.

Так выглядит без переносов:

text

FILTER: citforum.ru-print-m
s@(<body[^>]*>).+<!--B2BCONTEXT_CONTENT_BEGIN-->(.+)<center><!--  AdRiver code START\. Type:468x60 Site: citforum PZ: 0 BN: 1 -->.+</body>@$1\n<!-- privoxy begin -->\n$2\n<!-- privoxy end -->\n</body>@sig

Фильтр работает для всего содержимого citforum.ru.

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

text

FILTER: имя
s@шаблон@подстановка@sig
s@шаблон@подстановка@sig
s@шаблон@подстановка@sig

Теперь в файле /etc/privoxy/user.action укажем Privoxy применить фильтр к URL

text

{+filter{citforum.ru-print-m} \
}
citforum.ru/operating_systems/linux/user

Тоже самое можно сделать через веб-интерфейс.


Скриншоты до и после фильтра.

Сверху:



Снизу:




Вот еще пример - на http://jenyay.net/Programming/Tools есть куча статей по использованию vim и про git, есть возможность распечатать, но в распечатку зачем-то добавлено голосование, режем его.

text

FILTER: jenyay.net-print-m
s@<div class='vspace'></div>[^<]*<div class='rater' >.+</body>@</body>@sig
text

{+filter{jenyay.net-print-m} \
}
jenyay.net

Можно еще, к примеру, поменять CSS.
Некоторые при помощи Privoxy вырезают троллей на форумах(не в буквальном смысле :D).
Ссылки:
Краткое описание синтаксиса PCRE
РУССКИЙ PRIVOXY - Имеется форум, на котором можно задать вопрос и почитать туториал по созданию фильтров.
Я уверен, что Greignar, обитающий что на этом форуме, ответит на любой вопрос по теме и, возможно даже, фильтр сделает по просьбе (только не наглейте).

Жду оценок :D

#135027

Демонстрирую как можно поизгаляться над linuxforum.ru при помощи privoxy.

Бесполезные фильтры, для примера.
s@(<div\s+class="post odd firstpost topicpost")@$1 style="display:none"@sig - Удаляем топик.
s@(<div\s+class="post even replypost")@$1 style="display:none"@sig - Удаляем чётные ответы.
s@(<div\s+class="post odd replypost")@$1 style="display:none"@sig - Удаляем нечётные ответы.
s@(<div\s+class="post even lastpost replypost")@$1 style="display:none"@sig - Удаляем последний ответ.
s@(<div\s+class="post (?:odd firstpost topicpost|even replypost|odd replypost|even lastpost - Всё предыдущее одним фильтром, то есть все посты.
replypost)")@$1 style="display:none"@sig

Теперь полезные.
Удаляем подписи, экран не резиновый :D

text

FILTER: linuxforum.ru-sig-m
s@(<div\s+class="sig-content")@$1 style="display:none"@sig
text

{+filter{linuxforum.ru-sig-m} \
}
citforum.ru

Удаляем ответы троллей, топик и последний ответ не удаляются. :D

text

FILTER: linuxforum.ru-drBatty-m
s@(<div\s+class="post (?:even|odd) replypost")([^>]*>)((?:[^/]+){2}[^d]+drBatty)@$1 style="display:none"$2$3@sig
text

FILTER: linuxforum.ru-da_Vinci-m
s@(<div\s+class="post (?:even|odd) replypost")([^>]*>)((?:[^/]+){2}[^d]+da Vinci)@$1 style="display:none"$2$3@sig

За определение имени отвечают строчки "[^d]+drBatty", "[^d]+da Vinci".
Меняем на любой nickname , не забыв вставить в [^ ] его первую букву.

text

{+filter{linuxforum.ru-drBatty-m} \
  +filter{linuxforum.ru-da_Vinci-m} \
}
citforum.ru

Всё делается через изменение стиля, при желании можете не удалять, а изменить цвет к примеру.

#137022

Предлагаю фильтр делающий printable все статьи на welinux.ru

text

FILTER: welinux.ru-print-m
s@<body[^>]*>.+(<h2\s+class=["']title["'].+)<div\s+class=["']tags["']><span\s+class=["']grey["']>Теги:</span>.+</body>@<body>\n<!-- privoxy begin -->\n$1\n<!-- privoxy end -->\n</body>@sig

Теперь можете красиво распечатать http://welinux.ru/post/4428/ или ешё что нибудь.

И еще предлагаю переделанный фильтр удаляющий ответы нежелательных пользователей на linuxforum.ru
Удаляются все ответы Vasya, Petya, Hacker, кроме топика и последнего.

text

FILTER: linuxforum.ru-user-m
s@(<div\s+class="post (?:even|odd) replypost")[^>]*>((?:[^/]+){2}[^(]+\('(?:Vasya|Petya|Hacker))@$1 style="display:none"$2@sig

Ники перечисляем в конструкции (?:Vasya|Petya|Hacker), разделяя их символом |.

Тот же фильтр, за исключением того, что последний ответ также удаляется.

text

FILTER: linuxforum.ru-user-all-m
s@(<div\s+class="post (?:even|odd)(?: lastpost)? replypost")[^>]*>((?:[^/]+){2}[^(]+\('(?:Vasya|Petya|Hacker))@$1 style="display:none"$2@sig
#139754

Имеется возможность рекурсивно скачивать онлайн книжки при помощи httrack, пропустив их через privoxy.

Качаем с citforum.ru книжку "Хрестоматия по программированию на Си в Unix".

text

httrack -r3 -%e0 -%k -N1 -b1 -s0 -P "127.0.0.1:8118" "http://citforum.ru/programming/c_unix/"

Фильтр для того, чтобы почистить её описан в топике.

Войдите или зарегистрируйтесь, чтобы ответить.