账号通
    

账号  

密码  

1953

查看

2

回复
主题:采集与反采集 [收藏主题]  
hhflxx 当前离线

861

主题

0

广播

1

粉丝
添加关注
级别:七年级

用户积分:4349 分
登录次数:365 次
注册时间:2006/7/20
最后登录:2012/3/10
hhflxx 发表于:2007/2/21 23:16:00   | 只看该作者 查看该作者主题 楼主 
做在线知识付费 选科汛云开店

下面是大笨熊的反采集

防止数据被采集的最终解决方法


以下内容只有回复后才可以浏览
尽管互联网上很多人提出种种防止信息被采集的方案,但是结果都是不尽人意。

目前互联网提供的方案有:
1,基于Js控制的,如:

function setCookie(name, value, expires, path, domain, secure) {
        var curCookie = name + "=" + escape(value) +
                ((expires) ? "; expires=" + expires.toGMTString() : "") +
                ((path) ? "; path=" + path : "/") +
                ((domain) ? "; domain=" + domain : "") +
                ((secure) ? "; secure" : "")
document.cookie=curCookie;
        }
function getCookie(name) {
        var prefix = name + "="
        var cookieStartIndex = document.cookie.indexOf(prefix)
        if (cookieStartIndex == -1)
                return null
        var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length)
        if (cookieEndIndex == -1)
                cookieEndIndex = document.cookie.length
        return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex))
}

var now = new Date()
now.setTime(now.getTime() + 6*1000)
var jb51num=10;
var visits = getCookie("www_Xrss_cn")
if (!visits)
        visits = 1
else
        visits = parseInt(visits) + 1
if (visits>parseInt(jb51num)){
alert('没有内容');
location.href='http://www.xrss.cn';
}
setCookie("www_Xrss_cn", visits, now)
另存为Stop.Js文件,直接在信息页面调用Stop.Js就可以了
这个是利用Js写入Cookies来控制访问的次数达到效果的。
如果客户端制止Cookies读写,那这个代码就是白写的了。
再有,把搜索引擎也屏蔽掉了。

2,用编程语言来控制,如:asp控制的:

Dim AppealNum,AppealCount
AppealNum=10 '同一IP60秒内请求限制10次
AppealCount=Request.Cookies("www_Xrss_cn")
If AppealCount="" Then
response.Cookies("www_Xrss_cn")=1
AppealCount=1
response.cookies("www_Xrss_cn").expires=dateadd("s",60,now())
Else
response.Cookies("www_Xrss_cn")=AppealCount+1
response.cookies("www_Xrss_cn").expires=dateadd("s",60,now())
End If
if int(AppealCount)>int(AppealNum) then
response.write "抓取很累,歇一会儿吧!"
response.end
End If

读写Cookies可以给客户端有可以避开的方法,而且这样搞,对于搜索引擎也屏蔽掉了。

3,生成pdf文件、生成图片
这个方法可以比较有效的防止采集,不过照样让搜索引擎望而却止。

4,加上自己的版权信息
这个方法最大的好处就是不影响搜索引擎,效果马马虎虎,一般上可以让采集者采集到带有自己版权的稿件内容。但是对于可以过滤广告的采

集程序来说,不大有效。

...............................
本人提出的解决方法有:
首先,我从源头上说说采集的原理,看看下面主要的一个采集函数GetBody(ConStr,StartStr,OverStr,IncluL,IncluR):

'==================================================
'函数名:GetBody
'作 用:截取字符串
'参 数:ConStr ------将要截取的字符串
'参 数:StartStr ------开始字符串
'参 数:OverStr ------结束字符串
'参 数:IncluL ------是否包含StartStr
'参 数:IncluR ------是否包含OverStr
'==================================================
Function GetBody(ConStr,StartStr,OverStr,IncluL,IncluR)
If ConStr="$False$" or ConStr="" or IsNull(ConStr)=True Or StartStr="" or IsNull(StartStr)=True Or OverStr="" or

IsNull(OverStr)=True Then
GetBody="$False$"
Exit Function
End If
Dim ConStrTemp
Dim Start,Over
ConStrTemp=Lcase(ConStr)
StartStr=Lcase(StartStr)
OverStr=Lcase(OverStr)
Start = InStrB(1, ConStrTemp, StartStr, vbBinaryCompare)
If Start<=0 then
GetBody="$False$"
Exit Function
Else
If IncluL=False Then
Start=Start+LenB(StartStr)
End If
End If
Over=InStrB(Start,ConStrTemp,OverStr,vbBinaryCompare)
If Over<=0 Or Over<=Start then
GetBody="$False$"
Exit Function
Else
If IncluR=True Then
Over=Over+LenB(OverStr)
End If
End If
GetBody=MidB(ConStr,Start,Over-Start)
End Function
(引自:http://www.xrss.cn/Info/7818.Html)
(此函数为Asp语言编写,更多有关采集的函数请看http://www.xrss.cn

解说一下,以上函数是要利用到一个获取到的页面源代码ConStr,而ConStr的代码是从函数 GetHttpPage(HttpUrl)读取而来,函数GetBody的目

的就是从获取到的源代码中提取需要的部分,这就是采集中的关键了,StartStr为开始的字符串,而OverStr为结束的字符串,要使用函数GetB

ody提取到需要的代码,那就是说StartStr和OverStr的识别码为代码中的唯一咯,好了,根据此条件,我们就可以知道怎么去防止这类采集发

生,只要保证页面中的代码标识不唯一就可以了。有些人可能会说,那就是信息显示页面用不同的页面结构模板就可以了嘛,呵呵,如果您要

这样做,我想应该也是可以的,但是,不可能每个信息页面的结构都变吧,页面不同于频道,可能每个频道的页面结构不相同,但是同一个频

道的页面结构也应该相同吧,如果您的回答还是否的话,下面的不用看了,因为您找到方法了。呵呵,我们现在来看看怎么设置才能做到页面

的标识不唯一呢???

一,代码Id变通方法。


大家可能会知道,一个Table里面可以有Id,而td也可以有Id(对于Tr是否可以有一个Id,我没有试过,你自己可以试试,加一个Id,如果能正

确显示,那就说tr加一个Id都是可以的),甚至Span、Div也可以有一个Id,我们利用Id变化来使得页面模板结构似是而非。什么意思??下面

我演示一个代码给您看看:

<Table Id="xrssOne">
<Tr>
<Td Id="xrssTwo">
<Div Id="xrssThree">信息标题</Div>
</Td>
</Tr>
<Tr>
<Td Id="xrssFour">
<Span Id="xrssFive">信息标题</Span>
</Td>
</Tr>
</Table>
看到了吗??
Id:
xrssOne
xrssTwo
xrssThree
xrssFour
xrssFive
这五个Id,如果在程序里面用一个随机数来控制,那就是每个页面结构的都不是一样的咯(不相同的是Id),这样就可以有效的打乱了页面相

同结构的模板。
对于这五个Id怎么随机法?不防这样,就用时间,用Asp语言实现如下:
xrssOne=minute(Mow())
xrssTwo="zrb"&minute(Mow())
xrssThree=Hour(Now())
xrssFour="xrss"&Hour(Now())
xrssFive="www.xrss.cn"&minute(Mow())&Hour(Now())
(当然ID生成也可以根据其它函数,如文本入库时间,随基数.....)
这个是动态页面的处理方法。
如果静态页面的生成方法,可以用到Replace函数将模板中相关ID替换掉,当然记得一定要在模版中修改、添加以上ID。

由于页面的信息代码远不如一两个table的,所以Id越多,越难采集;页面代码越多,越复杂,代码唯一的可能性越少,采集的机会越少。

二,内嵌Js方法,这个方法算是盲羊补牢之方法。


就是在信息代码中内嵌Js方法,一般来说,数据采集一般会对页面的源代码进行分析,但是不会对信息内容进行分析,就算采集者对页面中的

内容进行替换,你也可以用一些没有使用的域名或者很特别的命名来达到效果。对于信息内容内嵌Js代码,这个动作可以在信息显示页面进行

嵌入或者在信息入库中进行嵌入(最好是在显示信息的时候嵌入),如:您要插入一个“<script language="JavaScript"

src="http://www.xrss.cn/Js/Stop.Js"></script>”Stop.Js文件,这个可能要你在信息入库的时候插入一个特别的字符,在信息内容显示的时

候把这个特别的字符替换为<script language="JavaScript" src="http://www.xrss.cn/Js/Stop.Js"></script>字符。在Stop.Js文件中,你可

以放自己的广告.....之类,下面会有一个更狠的,下面慢慢给您解说。如果您不想在信息内容入库的时候插入特别的字符,你可以根据您内容的

特点,如IT类文章肯定有<br>这些字符,处理的时候,随机地选择其中的一个替换为<script language="JavaScript"

src="http://www.xrss.cn/Js/Stop.Js"></script><br>,记得加上<br>哦。使用内嵌Js方法的时候要注意:

1,Js文件记得要绝对页面路径。就是一定要用http://www.xrss.cn/Js/Stop.Js,不能用/Js/Stop.Js,防止内嵌Js失效。
2,Js的链接域名尽量特别。比如新开一个二级域名,或者非本信息显示页面的域名。
3,Js的文件名尽量复杂。我这里为了好说明问题,所以特别使用stop.Js文件名,但是真正要使用的时候,文件名要设置为很特别的那种,防

止采集的小偷识别出来而进行替换。
3,内嵌的Js后辍名的问题。由于Js保存的后辍名不一定要为Js,可以保存为Gif或者没有.Js......之类的,这样更加防止这个Js代码被发现。

最好保持为Gif后辍名,因为可能有些采集工具,如果后辍名为Gif的被一起保存在它的服务器上,虽然被保持,但是里面的Js内容为您自己写

的,如果写一些下载木马之类的代码在里面,呵呵。

在这里说说Js里面内容代码的问题,如果您感觉那个小偷程序很讨厌,可以在Js代码里面放入您的内容,如:

1,您自己的广告内容,呵呵,让对方给您也做广告(这个,采集者可能很容易发现)
2,写一个代码跳转的程序,如:
var pageUrl="";
pageUrl = window.location;
pageUrl = pageUrl.toString()
if (pageUrl.indexOf('xrss.cn')==-1&&pageUrl.indexOf('pclala.com')==-1)
{
alert('错误提示:该页面为盗链程序!')
location.href='http://www.xrss.cn/'
}
呵呵,这个代码一经过启用,呵呵
3,放置木马下载之类的内容,就是在代码中连接其它的动态语言程序,呵呵,这个尽量少用吧,呵呵。





后记:
本人写这个防采集的方法,是切肤之痛得出来,因为我的站点经常给别人采集,搞得我换了几次服务器,严重影响了站点的正常运行。感觉互

联网的信息本来就应该共享的,但是无论怎么样,采集人的快乐也不能建立在别人的痛苦之上,如果您是喜欢本站内容的,可以一篇一篇复制

过去,但是您来一个批量的采集,丝毫不费一点力气,就把别人几年或者几十年的辛苦收集、整理的信息在几分钟之内全部采集完,这样建站

,也未免太烦躁点吧。

本文提供的方法中,鼓励使用第一种方法。这样对使用者有警示作用,压制一下目前的信息采集风气。除非逼不得已,谨慎使用以上提供的两

个方法一起使用。
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
hhflxx 当前离线

861

主题

0

广播

1

粉丝
添加关注
级别:七年级

用户积分:4349 分
登录次数:365 次
注册时间:2006/7/20
最后登录:2012/3/10
hhflxx 发表于:2007/2/21 23:51:00   | 只看该作者 查看该作者主题 沙发 
今晚正在把一个修改好的笑话站采集入库,由于用快速采集总是iis'罢工,我只能选择稳定采集模式,很慢 啊。
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
hhflxx 当前离线

861

主题

0

广播

1

粉丝
添加关注
级别:七年级

用户积分:4349 分
登录次数:365 次
注册时间:2006/7/20
最后登录:2012/3/10
hhflxx 发表于:2007/2/21 23:25:00   | 只看该作者 查看该作者主题 藤椅 

先在采集真的是越来越难了,很多网站都做了反采集的工作,但采集者也在不断的学习中。

现在能直接用采集程序采集到的内容也来越少了,除非是那些没有多少价值的东西。

现在我选择的是用离线浏览器整站下载,再用批量文件字符替换工具删除那些script字段和那些影响采集的时段。直到最后只剩下内容和html代码。然后再用网站上的采集程序来采集我的硬盘上面的网站。

反采集一般对离线浏览软件是没有办法回避的,除非连搜索引擎也回避,离线浏览器的功能设置再怎么说也比asp程序的功能强。

干扰代码几乎都可以用批量文件字符替换工具删除,你总不能一个个页面一点关联都没有吧?只要有一点关联我就能整站替换。

为什么选择采集?因为我只有一个人,不可能去一篇篇的复制,虽然那样建站质量会好一些,但是建好站要到什么时候谁知道啊。


[此贴子已经被作者于2007-2-21 23:35:25编辑过]

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
<上一主题 | 下一主题 >
Powered By KesionCMS Version X1
厦门科汛软件有限公司 © 2006-2016 页面执行0.14063秒 powered by KesionCMS 9.0