Автор |
Сообщение |
AlexeiK
Гость
|
aqa.ru/forum/obzoryi-ptichego-ryinka-112416-page1
для примера.
я уже пробовал отловить таблицу в которой этот баннер сидит, но NEST(table,/table) не может захватить ее всю. видимо специальные ошибки внутри разметки есть.
как быть?
|
|
|
К началу |
|
 |
AlexeiK
Гость
|
только забыл упомнять, я имею ввиду баннер Google
<table *>$INEST(<table*>,*<div class="smalltxt">\1*Google*\2</div>*,</table>)</table>
вот так ловлю таблицу с ним.
тест проходит когда есть только эта таблица.
но этот фильтр нужно использовать как я понял с границами.
и там я не знаю как сделать.
|
|
|
К началу |
|
 |
AlexeiK
Гость
|
вот все таки сделал.
не знал что в scope тоже работают команды NEST
Name = "aqa.ru yandex"
Active = TRUE
Multi = TRUE
URL = "aqa.ru"
Bounds = "$NEST(<table*>,</table>)"
Limit = 6000
Match = "$NEST(<table*>,*<div class="mediumtxt" id="yandex_ad"></div>*,</table>)"
Replace = "\1"
Name = "aqa.ru google"
Active = TRUE
Multi = TRUE
URL = "aqa.ru"
Bounds = "$NEST(<table*>,</table>)"
Limit = 6000
Match = "$NEST(<table*>,*src="pagead2.googlesyndication.com/pagead/show_ads.js">*,</table>)"
Replace = "\1"
вот фильтры.
|
|
|
К началу |
|
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Нет там и так рекламы. Конечно, при наличии в AdList соответствующих записей:
Цитата: |
([^/]++.|)googlesyndication.com/pagead/
([^/]++.|)google-analytics.com/
([^/]++.|)googleadservices.com/
pagead?.googlesyndication.com/
mc.yandex.ru/
bs.yandex.ru/
yabs.yandex.ru/
click.yandex.ru/
clck.yandex.ru/
awaps.yandex.ru/
an.yandex.ru/ |
(Для данного сайта достаточно двух выделенных.)
|
|
|
К началу |
Профиль Сообщение |
 |
AlexeiK
Гость
|
Я не то, чтобы про рекламу.
Я про layout постов в топиках.
Там есть посты пустышки от рекламы.
Вот их и я убирал.
|
|
|
К началу |
|
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Ах лойаут... ;)
Тогда вот версия покороче:
Код: |
Name = "Aqa.ru forum cleaner {site}"
Active = TRUE
URL = "www.aqa.ru/forum/"
Limit = 777
Match = "<table width="99%" border="0" align="center" cellpadding="0" cellspacing="0">"
"( $NEST(<tr>,</tr>) <tr> $NEST(<td,</td>) <td[^>]+> <table[^>]+> <tbody><tr class="offlight">)\1"
Replace = "<table style="display:none">"
"\1" |
Идея в том, чтобы не пытаться собрать в памяти весь кусок кода, содержащегося внутри нужного элемента, а нейтрализовать этот элемент в самом начале, как только его можно различить.
ПС: Помятуя, какая стрёмная тут каптча, рекомендую зарегистрироваться и больше её не видеть.
|
|
|
К началу |
Профиль Сообщение |
 |
Alexei
Newbee

Зарегистрирован: 11.07.2005
Сообщения: 5
|
Да, рег то давно уже есть
Только не понятно, как трактовать совет, по нейтрализации.
По моему представлению, выкусывается все что между <table> и потом уже ищется.
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Alexei писал(а): |
По моему представлению, выкусывается все что между <table> и потом уже ищется. |
Это вариант самый понятный, но не универсальный: бывают фрагменты безумных размеров, которые не влезают в буфер. Да и производительность лучше, если проверяемые фрагменты небольшие.
Вместо этого достаточно найти тег в начале фрагмента и сделать так, чтобы он сам отключил своё содержимое.
Типичный пример:
Код: |
<div id='advert'> ... 100500 строк шлака </div> |
Вместо того, чтобы забивать в буфер весь кусок и вычислять, какой из </div> его замыкает, достаточно найти 20 байт в начале фрагмента и заменить на <div style='display:none'>.
На Aqa ситуация несколько сложнее: убираемый фрагмент определяется не по самому началу, а по более далёким тегам ( class="offlight"). Но всё равно, как видно по лимитам, проверять приходится значительно меньше кода и нет необходимости попадать точно в закрывающий тег.
|
|
|
К началу |
Профиль Сообщение |
 |
|