返回列表 发帖

快眼看书(booksky.org)

  1. #exd#*booksky.org*#<p align="?center"?>[\s\S]*?<\/p>###<!--AD/TW2-->
复制代码
搜书的页面过滤的应该非常干净了,但是看书页面又个 动画 不会过滤。但是基本过滤已经过滤掉了。。呵呵 ~!


   非常感谢 elkay 大大的帮助~!!

[ 本帖最后由 pcxg 于 2007-12-28 19:43 编辑 ]

自己顶一下~!

TOP

还是那个问题。你在选择过滤部分的时候尽量不要用这种没有唯一性的标识,我看了下这个网站,你要过滤的部分其实是这个
<iframe frameborder=0 src='http://www.booksky.org/qihoo1.htm' width='760' height='112' scrolling=no marginwidth=0 marginheight=0></iframe>

另外还有一点,假如必须选择</table>这种标识的话为了代码的严谨,过滤完之后也一定要补上的,不然页面可能会出问题

TOP

我先移到这里,等你改好了再移动到主版

TOP

</table>  怎么补啊??下载就是补知道怎么补啊?还有论坛上面的教程相对简单了点啊~!没有一个可以完全的教程供大家学习。。

TOP

可以在替换串里加上你先前过滤掉的需要补上的内容。

教程只能是这样啊,只是一个参考,大多数还是要自己试的

其实只要多试几次,慢慢的就有经验了

TOP

有一句是这样的:<p align="center">  但是有时候又是<p align=center>那我怎么去些啊~!

TOP

也就是把:
#exd#*booksky.org*#<p align="center">[\s\S]*?<\/p>###<!--AD/TW2-->
#exd#*booksky.org*#<p align=center>[\s\S]*?<\/p>###<!--AD/TW2-->
这2句合成一句???

TOP

ok,你看这2个有什么区别?
<p align="center">
<p align=center>

实际上就是一个有"号,一个没有对吗?

再看一下正则表达式里?号的作用

? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。

明白应该如何了么?
(答案在下面,全选文字就能看到,建议你先不要看,自己先试试看)

只需要在"后面加上?就会变成同时匹配有"号或者没有"号的情况
即:<p align="?center"?>


[ 本帖最后由 elkay 于 2007-12-28 19:30 编辑 ]

TOP

呵呵 。搞定。。谢谢指导~!

TOP

晕~
你还是没明白我的意思。

通常情况下<p></p>是表示一个段落,页面中很可能不止一个,如果有其他的选择一般是不建议使用这个来过滤的。

你要过滤的那个网站首页,你要过滤的就是下面的内容
  1. <p align="center"><iframe frameborder=0 src='http://www.booksky.org/qihoo1.htm' width='760' height='112' scrolling=no marginwidth=0 marginheight=0></iframe><br></p>
复制代码

通常的作法是选择过滤这一段
  1. <iframe frameborder=0 src='http://www.booksky.org/qihoo1.htm' width='760' height='112' scrolling=no marginwidth=0 marginheight=0></iframe>
复制代码

这个iframe就是广告部分,而且里面的height='112' 指定了这个部分的高度,看一下这个页面的源文件,这个是唯一的,所以用这个来过滤,其实也可以选择src='http://www.booksky.org/qihoo1.htm'这个来过滤,这些都是不会对其他内容造成影响的

同一个页面的下面也有这么一段广告代码
  1. <iframe frameborder=0 src='http://code.comuce.com/bdcode/275.html?userid=6793' scrolling=no marginwidth=0 marginheight=0 width='760' height='110'></iframe>
复制代码


也就是这个页面中,这2个iframe就是广告,只要过滤掉这2个iframe就可以了
下面的正则表达式就可以匹配到所有的iframe,因为这个网页上只有2个iframe,下面的是可以的
  1. <iframe[^>]*?></iframe>
复制代码

但是如果有2个以上,并且其他的iframe都是正常内容的情况下,这个正则表达式就会有误杀现象。

所以必须要找一些有代表性的并且是唯一的东西来匹配,就像一开始说的,可以用高度,或者是链接的地址来匹配。
加入这里选择高度,那就是下面2条分别匹配到我们要过滤的部分。
  1. <iframe[^>]*?height='112'[^>]*?></iframe>
  2. <iframe[^>]*?height='110'[^>]*?></iframe>
复制代码

如何合并上面的2条呢?还是我前面帖子里说的,找一下他们的区别,这2条区别就在height后面的数值不一样,看一下教程里提供的正则表达式
  1. |
  2. "或"分隔符, 分隔多个表达式, 只须匹配其中一个.
  3. 例: th(is|at|ese|ose) 可以匹配 this, that, these 或 those.
复制代码


只要我们用"|"隔开2个不同的数字,其他部分就可以合并到一起了,你试试看能不能写出最后的规则。
(答案附在下面,一样建议不要看,先自己试试)
<iframe[^>]*?height='(?:112|110)'[^>]*?></iframe>

TOP

  1. #exd#*booksky.org*#<p align="center">[\s\S]*?<\/p>###<!--AD/TW2-->
  2. #exd#*booksky.org*#<p align=center>[\s\S]*?<\/p>###<!--AD/TW2-->
复制代码
这两句话其实是存在巨大的误杀风险的(我们的原则是,宁可漏杀不可误杀,宁可少杀不可滥杀),<p>标签是表示文章段落,因此使用<p>标签也会增加过滤所需的时间。所以,我们一般针对<p>标签内的信息进行过滤。

一般的,广告分为iframe广告、JS广告、带有<a>标签的超级链接广告(文本或图片)和包含在<object>标签内的flash广告,所以可以使用<p>标签内的信息进行过滤。
  1. <p align="center"><iframe frameborder=0 src='http://www.booksky.org/qihoo1.htm' width='760' height='112' scrolling=no marginwidth=0 marginheight=0></iframe>
  2. </p>
复制代码
请看,这段HTML代码中,包含在<p>标签内的iframe,一般的我们会针对这个iframe过滤,(很多情况下iframe被用来放广告,除了一些特别情况,如17K.com上的iframe被用来方网站的头部)

所以我们可以写如下的规则:
  1. #exd#*booksky.org*#<iframe[^>]*?qihoo\d[^>]*?><\/iframe>###<!--AdCodeFilterTest-->[001_iframe]<!--TheWorld2-->
复制代码
BTW,上面的replace部分“><!--AdCodeFilterTest-->[001_iframe]<!--TheWorld2-->”其实是我写完规则后测试时的习惯,使用这种办法可以知道过滤是否生效等信息,然后实际使用时去除这段replace。

呵呵,养成好的习惯可以让你在写规则时效率大增。
liuyis[AT]live.com

TOP

返回列表