绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
BSP防范Trackback垃圾的一种方法
2019-11-28 13:58:52

Trackback是个好东西,不过由于缺少对发送方的确认机制,一直备受垃圾的困扰。比如,CSDN和Donews都深受其害。甚至很多人整天都在讨论Trackback是该死还是不该死。

这样的讨论徒劳无益,技术方面,虽然已经有若干人作过尝试(1、2、3、4),不过大部分都未必简单可行。本文试图介绍一个简单可行的方法,并讲述如何在CSDN Blog系统中清除这些垃圾。

解决思路

Trackback垃圾产生的重要原因是大量站长在流量利益的驱使下的“变态”行为,其中也包括大量国外的劣质SEO。我们只有从对这些行为分析的基础上来解决Trackback垃圾问题。

我们知道,Trackback垃圾发送者有2个目的:一是希望用户通过连接访问他们的网站(比如一些美女se情站),二是希望搜索引擎加强他们网站的排名和收录。因此,他们通常都有Trackback回溯地址。我们通过这些地址的分析可以找出一些有价值的规律。然后基于这个规律上去清理Trackback垃圾。

收集Trackback信息

CSDN Blog的Trackback保存在一个名叫blog_feedback的数据表中,我们先尝试对Trackback回溯地址(数据库字段DisplayUrl)进行提取主域名的分析。做法可以直接在这个表上新建一个DisplayUrlRoot字段进行保存。

update blog_feedback set DisplayUrlRoot=dbo.getUrlRoot(DisplayUrl) where feedbacktype=2

其中getUrlRoot是一个用户自定义函数,获取回溯地址的主域名

CREATE FUNCTION [dbo].[getUrlRoot]

(@sURL nvarchar(256))

RETURNS nvarchar(256)

AS

BEGIN

declare @m_f int

declare @m_len int

declare @ret nvarchar(256)

set @ret=''

select @m_f = PATINDEX('%//%', @sURL)

if (@m_f = 6) -- Is HTTP URL Format

begin

select @m_len = LEN(@sURL)

select @m_f = PATINDEX('%/%', SUBSTRING(@sURL, 8, @m_len-7))

if (@m_f != 0)

begin

select @ret = SUBSTRING(@sURL, 8, @m_f-1)

end

else --没有发现'/'

begin

select @ret = SUBSTRING(@sURL, 8, @m_len-7)

end

select @m_f = PATINDEX('%.%', @ret)

select @ret = SUBSTRING(@ret, @m_f+1, LEN(@ret)-@m_f)

end

return @ret

END

这样我们对每个Trackback就获取了一个回溯地址的主域名,下面的分析基于这个新字段进行统计分析。所以之前应该为这个字段加上一个索引。

统计Trackback信息

在SQL查询分析器中执行下面语句

select DisplayUrlRoot, count(ID) from blog_feedback where DisplayUrlRoot is not null

group by DisplayUrlRoot having(count(ID))>50 order by count(ID) desc

我们可以看到所有Trackback回溯地址的主域名有50个以上的域名列表,在CSDN Blog的排名前5个是

域名:alice.it   条目数:39337

域名:blogspot.com 条目数:14447

域名:editme.com 条目数:8439

域名:aol.com 条目数:7043

域名:psl.lt  条目数:6907

经过检查,这里全是Trackback垃圾。

Trackback清理方法

在CSDN Blog,条目数大于50的Trackback回溯地址的主域名有367个,大量国外不知名的域名我们不需要检查,只需要重点筛选一些知名和相关网站即可。我们发现,对于CSDN Blog的Trackback而言,只有来自以下3个域名的Trackback是全部“干净的”:csdn.net、cnblogs.com、donews.net,另外,msn.com有一半左右是“干净的”。

现在我们开始清理了,执行下面这条语句:

delete blog_feedback where DisplayUrlRoot in

(select DisplayUrlRoot from blog_feedback where DisplayUrlRoot is not null and

DisplayUrlRoot not in ('csdn.net', 'donews.net', 'cnblogs.com', 'msn.com')

group by DisplayUrlRoot having(count(ID))>50)

执行后,近24万多条Trackback垃圾马上消失。仅留下了16394条有用的信息。

那些知名网站Trackback垃圾多?

以下纯粹是CSDN Blog统计分析的结果,仅说明某些人借助一些知名网站进行垃圾传播:

域名:blogspot.com  条目数:14447

域名:aol.com  条目数:7043

域名:blog.hexun.com  条目数:6621

域名:blog.ccidnet.com  条目数:4980

域名:netscape.com  条目数:1378

域名:baidu.com  条目数:804

域名:a8.com  条目数:704

域名:blog.sohu.com  条目数:344

域名:china.alibaba.com  条目数:243

结语

本文基于对Trackback回溯地址主域名的统计分析的基础上给出了一种大批量消除Trackback垃圾的方法,并在CSDN Blog消除效果良好。值得大型BSP借鉴。

Update:

前面提到,msn.com有一半左右是“干净的”,如何清理呢?我也发现,99.9%的正常从msn.com过来的Trackback没有标题,而垃圾Trackback是全部有标题,这是一个有用的线索。执行:

delete blog_feedback where DisplayUrlRoot = 'msn.com' and title<>'' and ID not in (有限的几个有用的ID)

可以清理这些垃圾。执行完后,CSDN Blog正常Trackback下降到15411个。

————————————————

版权声明:本文为CSDN博主「zdg」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/zdg/article/details/1439158

分享好友

分享这个小栈给你的朋友们,一起进步吧。

星说
创建时间:2019-11-28 12:45:43
作为炎黄子孙,我们有很多知识渊博的祖人,这个祖人指的是在各领域登峰造极的学者论说,我们跟随强大基因的路线,学习,深化自己的知识体系,优化环境。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • unnamed persona
    栈主

小栈成员

查看更多
  • 外星人6
  • supergirlxu
  • unnamed person1
  • daxuesheng
戳我,来吐槽~