Page 1 of 1
请教一个div标签的过滤
Posted: Oct 03 2009, 18:52
by 不夜侯
规则如下:
Code: Select all
[Patterns]
Name = "Kill ad idclass"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 8000
Match = "<(\w)\1[^>]++\s(id|class|name)\3=($AV($LST(Ad_idclass)))\2[^>]++>$INEST(<$TST(\1)*>,</$TST(\1)>)</$TST(\1)>|"
"<(\w)\1[^><]++\s(id|class|name)\3=($AV($LST(Ad_idclass)))\2[^>]++>"
Replace = "<! ----- kill [\1 \3=\2] ----->"
想要过滤的网页:
http://money.163.com/
目的是过滤这个标签:<div class="ggarea clearfix">
在Ad_idclass如果是直接这样添加:
则可以过滤。
如果添加过滤网页地址,写成:
Code: Select all
$URL(http://money.163.com/) ggarea clearfix
则过滤不成功。
反复测试都是如此。请问问题出在什么地方?谢谢!
Re: 请教一个div标签的过滤
Posted: Oct 03 2009, 22:59
by phoenix
如果是在 prox 的 test window 中测试,prox 会假设当前 url 为:
Code: Select all
http://www.Shonen.Knife.com/Naoko/Michie/Atsuko/kappa.ex.cgi?jackalope
则
$URL(http://money.163.com/) 会导致测试失败,但如果你刷新网页,会看到实际过滤是成功的。
Re: 请教一个div标签的过滤
Posted: Oct 04 2009, 14:37
by 不夜侯
实际刷新也是过滤不成功的。
进一步说明问题,这个标签内容如下,省略了一些具体内容用.............代替:
Code: Select all
<div class="ggarea clearfix">
<span class="blank9"></span>
<ul class="ggtext">
.............
<span class="blank9"></span>
<ul class="ggimg">
<li class="gg125">
.....................
<li class="gg660">
.........................
</li>
<li class="gg125">
...........................
</li>
</ul>
<span class="blank6"></span>
<!-- 通栏上文字 -->
<ul class="ggtext">
..........................
</ul>
<span class="blank9"></span>
</div>
1、在Ad_idclass如果是这样添加,则过滤成功。
Code: Select all
ggarea clearfix
gg(sidebox|hzh|top|[0-9]+)
ggtext
2、在Ad_idclass如果是这样添加,则过滤不成功。只过滤了<ul class="ggtext">、<li class="gg125">等,没过滤<div class="ggarea clearfix">。
Code: Select all
gg(sidebox|hzh|top|[0-9]+)
ggtext
$URL(http://money.163.com/) ggarea clearfix
3、在Ad_idclass如果是这样添加,删除gg(sidebox|hzh|top|[0-9]+)、ggtext,则也过滤成功。
Code: Select all
$URL(http://money.163.com/) ggarea clearfix
以前也遇到过类似问题。弄不明白第二种情况有什么冲突的地方?
Re: 请教一个div标签的过滤
Posted: Oct 04 2009, 22:47
by phoenix
不夜侯 wrote:实际刷新也是过滤不成功的。
你首帖的例子,也就是你上面说的第三种情况,我实际测试过,过滤是成功的。你上面也提到是成功的。
不夜侯 wrote:
2、在Ad_idclass如果是这样添加,则过滤不成功。只过滤了<ul class="ggtext">、<li class="gg125">等,没过滤<div class="ggarea clearfix">。
Code: Select all
gg(sidebox|hzh|top|[0-9]+)
ggtext
$URL(http://money.163.com/) ggarea clearfix
这是因为
gg(sidebox|hzh|top|[0-9]+) 中的
gg[0-9]+ 匹配了
<div class="ggarea clearfix"> 中的
gg 。
一旦 proxomitron 在 blockfile 中发现一个匹配,它就会退出检索这个 blockfile ,所以下面的
ggtext 和
ggarea 都不会再被尝试了。
退出 blockfile 后, Match 表达式中的下一个字符应该是 $AV() 中的
" ,而实际文本中是
<div class="ggarea clearfix"> 中的
a ,匹配失败,注意我前面说过 proxomitron 不会再回到 blockfile 中检索其他的可能性,而是从实际文本中的下一个字符开始重新尝试 Match 表达式,最终匹配了
<li class="gg125"> 和
<li class="gg660"> 等等。
综上所述,在 blockfile 中添加项目应该注意唯一性,避免一个项目中的部分表达式被另一个项目包含。本例中
ggtext 和
ggarea clearfix 中的
gg 部分就被
gg(sidebox|hzh|top|[0-9]+) 中的
gg[0-9]+ 包含了。为了避免这种情况,可以写成:
Re: 请教一个div标签的过滤
Posted: Oct 05 2009, 09:07
by 不夜侯
谢谢phoenix,按照你的写法避免了匹配失败。
还有几个地方不明白。
1、
这是因为 gg(sidebox|hzh|top|[0-9]+) 中的 gg[0-9]+ 匹配了 <div class="ggarea clearfix"> 中的 gg 。
gg[0-9]+中的
[0-9]+,应该至少匹配一个数字吧?
2、
如果这样写过滤成功:
Code: Select all
ggarea clearfix
gg(sidebox|hzh|top|[0-9]+)
ggtext
如果其中一个指定URL,就过滤失败:
Code: Select all
gg(sidebox|hzh|top|[0-9]+)
ggtext
$URL(http://money.163.com/) ggarea clearfix
这个地方就有不明白,proxomitron 在 blockfile 中是不是有优先级别?先检索没有指定URL的规则,然后再检索指定URL的规则。
不指定URL的所有规则优先级别是平等的,检索时匹配最接近的规则过滤。如果匹配就不再检索指定URL的规则,如果不匹配就继续检索指定URL的规则。
要不就难以解释我上面所说的情况。
3、
再举一个例子,
http://www.tianya.cn/publicforum/articl ... free.shtml中有个标签:
<div id="adsp_list_top_banner" style="height:82px;"></div>
在 blockfile 中如果是以下就过滤成功:
如果指定URL,就过滤失败:
Code: Select all
ad
$URL(http://*.tianya.cn/) adsp_list_top_banner
Re: 请教一个div标签的过滤
Posted: Oct 05 2009, 11:02
by phoenix
不夜侯 wrote:
gg[0-9]+中的[0-9]+,应该至少匹配一个数字吧?
如果[0-9]+能至少匹配一个数字,我为什么要加{1,*}?自己在test window里验证一下吧。
不夜侯 wrote:
proxomitron 在 blockfile 中是不是有优先级别?先检索没有指定URL的规则,然后再检索指定URL的规则。
是否如此,你把指定URL的项目提到第一行试下便知。
为什么你指定URL后连项目排序也变了?这样引入了两个变量,出现问题后很难知道是哪个变量引起的。
很抱歉,如果blockfile中只有那两项,不管指定不指定URL,我测试下来都是失败的。为什么失败?我上一个回帖已经解释过了,也给出了解决方法,如果看不懂,麻烦多读几遍,自己多测试几遍。
另外,我直接给你个结论吧,这个问题和指定URL与否没有任何关系。
Re: 请教一个div标签的过滤
Posted: Oct 09 2009, 04:31
by Bonnie
有点疑问,[0-9]+不就是匹配一个或一个以上的数字吗?为什么要加上{1,*}?
我试了下,gg[0-9]+可以匹配gg1这样的数字啊。
Re: 请教一个div标签的过滤
Posted: Oct 09 2009, 09:56
by phoenix
是零或以上。我原来的回帖说得很明白了啊。
phoenix wrote:
这是因为 gg(sidebox|hzh|top|[0-9]+) 中的 gg[0-9]+ 匹配了 <div class="ggarea clearfix"> 中的 gg 。
gg[0-9]+固然可以匹配gg1,也可以匹配gg,你自己测试一下。
Re: 请教一个div标签的过滤
Posted: Oct 09 2009, 12:41
by 不夜侯
我测试过了,
[0-9]+ 是匹配零或以上位数的数字。
这地方犯了个错误,以为
[0-9] 表示任意单个的数字,所以想当然
[0-9]+ 至少是匹配一个或一个以上的数字。
如果是
gg[0-9] 反而不匹配
gg 。
在 blockfile 中的项目排序也很重要,以往我将指定URL的放在最后面,以为方便管理,却不知这样会造成一些过滤失败。
像ad、adsp_list_top_banner,先后秩序应该是:
Re: 请教一个div标签的过滤
Posted: Oct 09 2009, 15:27
by phoenix
不夜侯 wrote:
在 blockfile 中的项目排序也很重要,以往我将指定URL的放在最后面,以为方便管理,却不知这样会造成一些过滤失败。
像ad、adsp_list_top_banner,先后秩序应该是:
你这样排序还是有问题的。
如果 blockfile 中 没加 NoHash 关键字,那么Hash后的顺序是无法预料的。最稳妥的办法还是我前面说的保持条目的唯一性,避免部分包含。
当然,你可以加 NoHash 关键字来控制排序,不过会牺牲些性能。