Board logo

标题: 快眼看书(booksky.org) [打印本页]

作者: pcxg    时间: 2007-12-28 00:06     标题: 快眼看书(booksky.org)

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


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

[ 本帖最后由 pcxg 于 2007-12-28 19:43 编辑 ]
作者: pcxg    时间: 2007-12-28 00:07

自己顶一下~!
作者: elkay    时间: 2007-12-28 15:25

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

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

我先移到这里,等你改好了再移动到主版
作者: pcxg    时间: 2007-12-28 17:42

</table>  怎么补啊??下载就是补知道怎么补啊?还有论坛上面的教程相对简单了点啊~!没有一个可以完全的教程供大家学习。。
作者: elkay    时间: 2007-12-28 17:45

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

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

其实只要多试几次,慢慢的就有经验了
作者: pcxg    时间: 2007-12-28 18:49

有一句是这样的:<p align="center">  但是有时候又是<p align=center>那我怎么去些啊~!
作者: pcxg    时间: 2007-12-28 19:03

也就是把:
#exd#*booksky.org*#<p align="center">[\s\S]*?<\/p>###<!--AD/TW2-->
#exd#*booksky.org*#<p align=center>[\s\S]*?<\/p>###<!--AD/TW2-->
这2句合成一句???
作者: elkay    时间: 2007-12-28 19:27

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

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

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

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

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

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


[ 本帖最后由 elkay 于 2007-12-28 19:30 编辑 ]
作者: pcxg    时间: 2007-12-28 19:40

呵呵 。搞定。。谢谢指导~!
作者: elkay    时间: 2007-12-28 20:14

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

通常情况下<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>
作者: 285900537    时间: 2007-12-28 20:51

  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。

呵呵,养成好的习惯可以让你在写规则时效率大增。
作者: pcxg    时间: 2007-12-29 00:42

  1. #exd#*booksky.org*#<iframe[^>]*?height='(?:112|110)'[^>]*?></iframe>###<!--AD/TW2-->
  2. #exd#*booksky.org*#<IFRAME[^>]*?HEIGHT=(?:60|90)[^>]*?></IFRAME>###<!--AD/TW2-->
  3. #exd#*booksky.org*#<script type=[\s\S]*?google[\s\S]*?</script>###<!--AD/TW2-->
复制代码


   现在呢??这样子可以了吗???去大家多多指导。。 (我觉得1、2句可以合成一句就是一个大小写加多了个(‘)多(’)学会了就大小写不会。。)

[ 本帖最后由 pcxg 于 2007-12-29 00:45 编辑 ]
作者: elkay    时间: 2007-12-29 15:10     标题: 回复 13# 的帖子

tw的正则引擎是不区分大小写的,所以不需要考虑这个问题

ps:你测试一下没问题就去主版重新发个帖子吧

[ 本帖最后由 elkay 于 2007-12-29 15:14 编辑 ]
作者: pcxg    时间: 2007-12-29 15:18

  1. #exd#*booksky.org*#<iframe[^>]*?height='?(?:112|110|90|60)'?[^>]*?></iframe>###<!--AD/TW2-->
  2. #exd#*booksky.org*#<script type=[\s\S]*?google[\s\S]*?</script>###<!--AD/TW2-->
复制代码


  那么上面的就是完整的过滤规则了??
作者: elkay    时间: 2007-12-29 15:40     标题: 回复 15# 的帖子

其实还有小小的问题
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">

这个并不是广告脚本,只是一个统计脚本,一般是不需要过滤的

ps:你的规则中第二条写的有些问题,是匹配不到这个脚本的.
<script type=
你直接就跳过了链接部分,是无法匹配到的
作者: pcxg    时间: 2007-12-29 16:13

不是啊~!“<script type=[\s\S]*?google[\s\S]*?</script>”是匹配下面的
<script type="text/javascript">
google_ad_client = "pub-7396024520752195";
google_ad_slot = "8100034078";
google_ad_width = 728;
google_ad_height = 90;
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
作者: pcxg    时间: 2007-12-29 16:14

我不知道<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>是不是广告我就连它一起过滤了。
作者: elkay    时间: 2007-12-29 16:24

这样啊,呵呵,我一般都是在黑名单的基础下写规则,所以google的广告已经看不到了,以为你是过滤下面的统计呢。

你到主版发帖吧,应该没有问题了
作者: 牧木    时间: 2010-7-30 20:15

不知道怎么使用啊




欢迎光临 世界之窗论坛 (http://bbs.theworld.cn/) Powered by Discuz! 7.2