如何防止网站内容被别的网站恶意抓取

如何防止网站内容被别的网站恶意抓取,第1张

三种实用的方法

1、文章头尾加随机广告

2、文章列表加随机不同的链接标签,比如<a href="",<a class="dds" href=''

3、正文头尾或列表头尾添加<!--重复特征代码-->

第一种防采集方法:

下面我详细说一下这三种方法的实际应用:

如果全加上,绝对可以有效的防采集,单独加一种就可以让采集者头疼。。

完全可以对付通用的CMS采集程序。。

在采集时,通常都是指定头尾特征从哪到哪过滤这里我们先讲第一种方法,文章头尾加随机广告

随机广告是不固定的。

比如你的文章内容是"欢迎访问阿里西西",那么随机广告的加入方法:

<div id="xxx">

随机广告1欢迎访问阿里西西随机广告2

</div>

注:随机广告1和随机广告2每篇文章只要随机显示一个就可以了

第二种防采集方法:

<!--<div id="xxx_文章ID">-->

其它标题或内容

<!--<div id="xxx_文章ID">--> <div id="xxx_文章ID">

随机广告1欢迎访问阿里西西随机广告2

<--</div>-->

</div>

<--</div>-->

这是第二种防采集方法。在文章正文页面插入重复特征头尾代码的注释。

当然,这个可以用正则去掉,但足于对付通用的采集系统。。

第三种防采集方法:

第三种加在文章的列表,随便链接样式:

<a href="xxxhtml">标题一</a>

<a alt="xxx" href="xxxhtml">标题二</a>

<a href='xxxhtml'>标题三</a>

<a href=xxxhtml>标题四</a>

原理是让采集的人无法抓到列表链接规律,无法批量进行采集

如果三种方法全部加上,我想一定能让想采集的人头疼半天而放弃的

如果你还问,如何防止别人复制采集呢要做到这一点容易,把你的网站的网线拔了,自己给自己看就好了哈哈

如果你的文章来自原创,那像可以加上版权声明,别人随意转载时,你可以要求对方删除你有版权的文章

什么是Ajax

>

真正走进ASP NET MVC的世界 才知道它的精彩

抛弃WebService 在 NET 中用 jQuery 调用 WCF ——原来抛弃WebService之后 还可以用jQuery调用ASP NET MVC的Controller

Ajax为主的应用不需要ASP NET MVC 原来Ajax的世界更需要ASP NET MVC

曾经天真的想法 在实践中证明了它的天真 但在从天真到事实的过程中 得到的是成长

下面就谈谈我是如何认识到这个的 相比于结论 其中的过程更重要

还是以之前文章中的博客园站内短消息功能(显示当前用户短消息列表)为例 开始用的是jQuery插件Templates进行列表数据绑定 后来遇到了两个问题

) 在绑定时需要根据条件判断生成不同的元素 比如用户发过来的短消息 发件人显示为链接 如果是系统通知 则显示为文本 Templates对这样的 *** 作处理起来不是很方便

) 绑定后的数据无法在服务端重用 有时从搜索引擎友好或者用户体验的角度 在页面第一次加载时 不用ajax 在页面加载后点击刷新或分页链接时 才使用ajax 这样就要在服务端与客户端分别维护数据绑定 *** 作

也就是说原来服务端返回的是实体类对象列表 现在要返回的是将数据与Html组装起来的字符串

开始我们考虑的是一种丑陋的方法 用StringBuilder进行字符串拼接生成数据绑定结果 服务器端WCF服务中的代码如下

显然这种方法易出错 维护性差

接着我们考虑了第二种方法(参考自Render User Control as String Template) 通过Web User Control生成字符串 WCF服务中的代码如下

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

--> Page page = new Page();Control control = page LoadControl( ~/Controls/MsgListControl ascx );((IRenderable<List<SiteMsg>>)control) PopulateData(siteMsgList); StringBuilder = new StringBuilder();using (StringWriter sw = new StringWriter( )){ using (HtmlTextWriter h = new HtmlTextWriter(sw)) { control RenderControl(h); return ToString(); }}

由于MsgListControl ascx的类型是动态编译生成的 所以无法通过强制类型转换将control转换为MsgListControl类型 然后传递数据给它

这里需要通过一个另外的IRenderable<T>接口来实现数据的绑定 MsgListControl实现了这个接口 代码如下

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

--> public partial class MsgListControl : UserControl IRenderable<List<SiteMsg>>{ public void PopulateData(List<SiteMsg> siteMsgList) { rptMsgList DataSource = siteMsgList; rptMsgList DataBind(); }}public interface IRenderable<T>{ void PopulateData(T data);}

在WCF服务中通过调用接口中的PopulateData方法进行数据的绑定

这个方法增加了额外的接口 显得有些复杂

后来我们想到了ASP NET MVC 虽然不熟悉 但要尝试一下 看能否更好地解决这个问题

于是 上ASP NET MVC 用Razor 咱们也MVC一把

应用场景 在现有的VS Web Site项目中应用ASP NET MVC MsgController收到请求后 由Inbox(一个Action)将包含短消息列表的整个页面视图返回给客户端 当用户点击页面的刷新或者分页链接时 通过Ajax发起POST请求以获取短消息列表 MsgController收到请求后 由List(一个Action)将短消息列表的视图返回给客户端

期望的效果 短消息列表视图能重用 Inbox与List使用的是同一个视图

一开始遇到了两个小问题

a) MapRoute配置之后 访问出现 >

以上就是关于如何防止网站内容被别的网站恶意抓取全部的内容,包括:如何防止网站内容被别的网站恶意抓取、什么叫AJAX技术、事实证明Ajax的世界更需要ASP.NET MVC等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9556716.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存