返回列表 发帖

关于Deviantart的广告条过滤

Deviantart(http://www.deviantart.com)在进入首页后任意浏览一个页面上部就会出现广告条(如:http://xhantos.deviantart.com/art/Creapark-logo-4-91962590),我怎么也过滤不掉,我写的规则如下,不知道问题出现在什么地方:

  1. #exd#*deviantart.com*#<DIV style="OVERFLOW[^>]*?28px">[\s\S]*?Subscribe(?:[\s\S]*?<\/DIV>){33}###<!--Ad blocked by TheWorld2-->
复制代码


还有首页中下部一大块深色页面的信息,我只想过滤掉“&copy;2008 deviantART. All rights reserved”以上的部分,但我用来下列规则,“&copy;2008 deviantART. All rights reserved”就显示不出来了,有什么办法补救吗:

  1. #exd#*deviantart.com*#<div class="base-pane"[^>]*?>[\s\S]*?Hide(?:[\s\S]*?<\/div>){48}###<!--Ad blocked by TheWorld2-->
复制代码

第一个问题
这个广告部分在一个id="ad-blocking-makes-fella-sad"的div下,你过滤掉这个div就可以了,注意有div套嵌

第二问题
这个深色部分其中分成3个部分,一个是上面的图片,一个是中间的Community News那一部分,最后就是你要保留的copyright的部分,你要保留这个部分就需要过滤掉上面两个部分,上面两个分别是在<div class="base-pane" id="footer-pane-channels">...</div>和<table id="footerstuff" class="footer-pane-content f">...</table>中,注意其中一样有套嵌

TOP

感谢elkay大大的答复,还有两个问题需要请教:

1、问题一中,我用以下代码过滤后,下面的版页无法上移,有什么办法吗:

  1. #exd#*deviantart.com*#<div id="ad-blocking-makes-fella-sad"[^>]*?>[\s\S]*?Subscribe Now(?:[\s\S]*?<\/div>){4}###<!--Ad blocked by TheWorld2-->
复制代码


2、有一段广告想移除,代码如下:

  1. <div class="box">
  2.                 <div class="boxtop">
  3.                     <h2 class="c">deviantART Notice</h2>
  4.                             <a class="subbyCloseX"
  5.                 href="http://my.deviantart.com/services/?page=subscription&utm_source=RedX&utm_medium=Button&utm_campaign=Subscription_RedX"
  6.                 onmouseover="Subby.warning(this, 'Turn off', 'Ads')"
  7.                 onmouseout="Subby.out(this)"
  8.         >[x]</a>
  9.                     </div>
  10.                 <div class="pp c">
  11.                 <iframe id="a7bc0ff3" name="a7bc0ff3" src="http://adcast.deviantart.com/delivery/afr.php?n=a7bc0ff3&amp;zoneid=33" framespacing="0" frameborder="no" scrolling="no" width="300" height="250"><a href="http://adcast.deviantart.com/delivery/ck.php?n=a885e60f" target="_blank"><img src="http://adcast.deviantart.com/delivery/avw.php?zoneid=33&amp;n=a885e60f" border="0" alt=""></a></iframe>
  12. <script type="text/javascript" src="http://adcast.deviantart.com/delivery/ag.php"></script>
  13.                 </div>
  14.             </div>
复制代码


但网页代码中前面已有3处出现:

  1. <div class="box">
  2.             <div class="boxtop">
  3.                   <h2 class="c">...
复制代码


在这种情况下如何使用正则表达式表示?

TOP

这段代码的广告特征应该是“adcast”

最简单的过滤规则:

  1. *adcast*
复制代码



  1. /adcast/
复制代码


如果非得用正则,可以这样写:

  1. #exd#*网站*#<iframe[^>]*?adcast[\s\S]*?</iframe>###
  2. #exd#*网站*#<script[^>]*?adcast[\s\S]*?</script>###
复制代码

TOP

上面的规则只是把“box”里面显示的图片给屏蔽掉了,但我的目的是要将整个“box”(即我列出的整段代码)给屏蔽掉,小絮大大还有什么高见吗?

TOP

3楼的大段代码中,<div class="box">前还有个<div class="rr">并且唯一确定,所以顺利地屏蔽掉了,但对这个问题还有疑问,对于“a...a...a...b...a...b”这类文字(“...”代表任何字符,包括换行等),我只想匹配第一个“a...b”而不是“a...a...a...b”,或是只匹配第二个“a...b”,正则表达式应该如何写呢?

TOP

回复 3# Sanly 的帖子

1.广告过滤后无法上移是因为页面中css定义了顶部的高度,需要修改css才能达到你想要的效果

2.这种情况就是DIV套嵌,目前最简单的解决方法是找到你要过滤的部分的最后部分的后面的内容,然后过滤两者之间,然后在替换串部分补上不需要过滤的部分,我举个例子

比如有这么一段代码
<div id=1><div id=2>...</div></div><div id=3>
想要过滤其中的
<div id=1><div id=2>...</div></div>
这个时候我们可以选择过滤从<div id=1>开始一直到<div id=3>的内容,然后在规则的替换串部分补上被过滤掉的<div id=3>,这样就等于过滤掉了<div id=1><div id=2>...</div></div>

TOP

回复 6# Sanly 的帖子

这个问题可以用^和$(指定字符的开始和结束位置),置顶的教程中有这两个元字符的详细解释
也可以根据具体情况使用我7楼给出的第二条内容的办法

TOP

原帖由 elkay 于 2008-7-18 18:30 发表 http://bbs.ioage.com/cn/images/common/back.gif
这个问题可以用^和$(指定字符的开始和结束位置),置顶的教程中有这两个元字符的详细解释
也可以根据具体情况使用我7楼给出的第二条内容的办法


感谢elkay的回复,替换的方法应该是可行的。我又研究了一下,用"^"不太会,似乎可以用"(?<=exp)"搞定,但始终没有发现如"从第3个a开始匹配"的正则表达式的表达方式。

TOP

回复 9# Sanly 的帖子

嗯,办法其实是多种多样的,有时候只需要稍微转一下弯就可以了,不必拘泥于一定要用某一种方式来实现,这种不行换别的就好了

TOP

关于3楼中的第1个问题,我又研究了一下,我发现修改css没有效果,而要达到这一目的只要将源文件中的"withad"字符换成"noad"字符即可,但在源文件中"withad"字符前后没有固定的特征,但仅以"#exd#*deviantart.com*#withad###noad"这一代码进行替换,又会将网页原有的css文件中的"withad"替换掉而无法达到预期目的,请问有什么办法可以做到只替换源文件中的"withad"而不替换css文件中的"withad"吗?

TOP

返回列表