搜索引擎去广告代码

搜索引擎首页前三条结果,搜索一半是引擎广告,另一半是去广“百家号”的AI缝合怪文章。我受够了。告代所以写了段油猴脚本,搜索把百度、引擎谷歌、去广必应搜索结果里的告代推广链接全干掉。代码不长,搜索核心就一个正则匹配加DOM过滤,引擎但效果立竿见影。去广

先看百度。告代它的搜索广告藏在`#content_left`里,每条结果都有个`data-tools`属性,引擎里面带`"title":"广告"`字样。去广直接遍历所有`div[data-tools]`,用`JSON.parse`解析一下,如果`data-tools`里的`type`字段是`ad`或者`title`含“广告”,就`remove()`。简单粗暴,但有效。有个坑是百度偶尔把广告伪装成自然结果,class名都是`result-op`,这时候得额外检查`data-tools`里是否带`"isAd":1`。我加了个兜底:如果链接的`href`包含`baidu.com/link?url=`且父级元素有`data-log`,再查一下`data-log`里有没有`"ad":1`。三层判断,基本能拦干净。

谷歌就省事多了。它的广告结果都带`data-text-ad`属性,或者class是`uEierd`。直接`document.querySelectorAll('[data-text-ad], .uEierd')`,全删。但谷歌有个骚操作——广告链接的`href`经过跳转封装,看起来和普通结果无异。所以我额外检查了链接的`aria-label`,如果含“Sponsored”或“广告”,也一并干掉。实测下来,谷歌的误杀率极低,因为自然结果的`aria-label`都是纯标题。

必应最恶心,它把广告混在自然结果里,只靠`class="b_ad"`区分。但有时候`b_ad`的父容器也会被误判。我直接检查`

  • `的兄弟节点,如果它前面紧跟一个`
  • `,那就把整个`
      `里所有`b_ad`连同它的`b_algo`兄弟一起删。别问为什么这么绕,微软的DOM结构就是这么反人类。删完还得手动把`b_algo`的`margin-top`归零,否则排版会留个大空白。

      写脚本时最烦的是动态加载。你往下滚动,搜索引擎会AJAX拉新结果,新广告又冒出来。所以得用`MutationObserver`监听结果容器的子节点变化,每插入一批节点就跑一次过滤函数。但注意别死循环——过滤函数会改动DOM,触发观察器,又跑一遍。我加了个`isFiltering`标志位,处理期间直接return。

      还有个细节:百度搜索框下方的“百度热搜”和右侧的“相关人物”不算广告,但很烦人。我顺手把`#con-ar`和`.c-container[data-click*="hot"]`也清了。谷歌的“People also ask”问答框我留着,因为有些问题确实有用。必应的“Related searches”底部推荐也删了,那些全是推广链接。

      代码总共八十行,挂到Tampermonkey上,打开搜索引擎就是清爽的纯结果页。你可能会问,误杀怎么办?我用了白名单机制:如果某条结果被过滤后,页面总结果数少于5条,就把刚才删的恢复回来。逻辑是——宁可漏杀,不可错杀。毕竟有时候搜冷门词,谷歌会把唯一的有效结果标成广告,那反而帮倒忙。

      最后说句大实话:这脚本治标不治本。搜索引擎的广告算法在变,我的正则也得跟着改。但至少现在,每次搜完东西不用再眯着眼分辨哪个是“推广”哪个是“官网”,眼睛舒坦多了。代码放GitHub了,你直接复制就能用。要是哪天失效了,去Issues里骂我,我抽空更新。