正常访问状态! 设为首页 | 加入收藏夹 | 浏览历史  
  http://www.guosp.com
 碧海澜涛居
  海纳百川,有容乃大。壁立千刃,无欲则刚!
 
 
关键词:
  网站首页 | 关于本站 | 技术资料 | 美文日志 | 读书收藏 | 影视收藏 | 软件收藏 | 摄影相册| 留言板 
  技术资料 >> 网络安全 关闭(快捷键alt+C)
搜索标签: 抓取 网页内容
网页防抓取的一个思路以及实现
[阅读次数:2798次]  [发布时间:2009年10月12日]

能搜到的 方法,无外乎判断 Http_referer 是否来源于本站和在网页里换行和回车后面添加本站名称和随机字符串。这两个方法对于略懂http协议和正则替换的兄弟来说,完全没用。对于我所知的和网上常用的几种方法具体分析如下:

1 判断http_referer
http_referer是http头中的一段,不管使用VB/VC 的 winsock / inet transfer 控件,还是 使用asp服务器就可以用的 xmlHttpRequest 对象 ( for ajax ) , 抑或是php socket 、python urllib2, 都可以轻易的修改http header , 从而直接修改 http_referer的值。最偷懒的做法就是,把http_referer赋值为你的网站根url或访问的页面url。VB 中的 WebBrowser 控件更是不存在这个问题……大不了抓的慢一些就是了

此方法唯一有效的,可能对采用Adodb.Stream对象的抓取

2 加入随机字串/本站名称/url
对于固定字串,如本站名称和url,很多成型的网页采集程序都直接提供选项可以替换掉,实现起来也很容易。被采集方由于有在页面内放置不可见元素和堆砌关键字的嫌疑,有可能还会被搜索引擎认为作弊,这招很不可取~

对于随机字串,直接用字符串替换是不可以的,但是如果结合页面源码合理的运用正则表达式,一样可以破掉。比如:匹配 [\w]{,16}<br> ,替换为空,就可以删掉处于<br>之前的16位随机字母、数字字符串

3 在网页内加入能中断页面运行的脚本

在网页中加入 诸如 <script>alert("xxx")</script> 之类的脚本,用以阻断页面执行和显示。想出这个方法来的兄弟一定很bt~ 但是又有些可笑。只要不是抓完就直接显示页面的,这个方法根本没用。具体原因不再多说。而且这样对于被采集方网站的用户体验是个很坏的方面。

-------------------------------------------------------------------------------------------------

4 我的方法
前几日要求写一个放采集的程序。要求使一个打印内容的列表页面防采集。前思后想,认为只有一个办法,就是打乱表格的输出次序,采用随机顺序输出,在客户端使用js操作dom调换顺序。这样,服务器端输出的html中的表格非常的乱,但是客户查看和打印时又能正常显示。缺点是,正确的顺序依然要输出到页面上,如果采集方根据这个规律也将表格内容重新排序,仍然是可以读取的。

实现方法如下

 

<%function swap(byref a,byref b)
    dim c
    c = a
    a = b
    b = c
end function
    dim nam,tempRND,orders
   
    redim orders(nRS + 1)
    redim order(UBound(aRS,1))
    orders(0) = join(array(1,2,3,4,5,6,7,8,9,0),",")
   
    randomize
    rnd()
   
    i = 0
   
    do while i <= nRS
       
        for j = 0 to ubound(order)
            order(j) = j
        next
        for j = 0 to ubound(order)' step 2
            tempRND = int(rnd() * (UBound(order) + 1))
            call swap(order(j),order(tempRND))
        next
        orders(i + 1) = join(order,",")
  %>
  <tr>
      <%
'          for j = 0 to UBound(order)
            response.write "<td >"
            response.Write aRS(order(j),i)
            response.write "</td>"
        next
'        Response.write "</tr><tr>"
%>
  </tr>
<%
        i = i + 1
    loop
%>
<script>
var aOrd = [[<%= join(orders,"],[") %>]];
reOrder("tblList",aOrd);
</script>

客户端重新组合方法如下:

 

function reOrder(sObj,aOrder)
...{
  var o = document.getElementById(sObj).childNodes[0];
  ...{
    try...{
      var t = o.childNodes.length;
    }catch(E)...{
      alert(E.description);
      return;
    }
  }
  for(var i = 1; i < o.childNodes.length ;i++)...{
    var aReOrder = new Array();
    var tr = o.childNodes[i];
    for(var j = 0; tr.hasChildNodes() ;j++)...{
      aReOrder[aOrder[i][j]] = tr.removeChild(tr.childNodes[0]);
    }
    for(var j = 0; j < aReOrder.length;j++)...{
      tr.appendChild(aReOrder[j]);
    }
  }
}
</script>

 

虽然这个不是完全一劳永逸的方法,至少可以难倒大批的不会js的程序员……





本页地址: [复制地址]
该页内容非本站原创 收藏自:http://blog.csdn.net/slawdan/archive/2007/04/18/1568910.aspx
返回顶部 关闭(快捷键alt+C)
评论统计(0条)| 我要评论
暂无评论内容!
我要评论 
我要评论: 带*部分需要填写
 姓名称呼: * 请填写您的姓名或呢称
联系方式: QQ,MSN,Email都可以,方便交流 (仅管理员可见)
 评论内容: * 不超过100字符,50汉字
验证码:
    
  推荐链接
  最近更新  
·Host 'XXX' is not allowed...
·Win2008或IIS7的文件上传大...
·IIS7.0上传文件限制的解决方...
·测试信息2015-03-11
·asp.net中处理图片
·ASP.NET之Web打印-终极解决...
·Asp.net下C#调用Word模版实...
·asp.net下将页面内容导入到...
·asp.net导出为pdf文件
·asp.net生成pdf文件
·FCKeditor 文本编辑器的使用...
·ASP.NET 将数据生成PDF
·asp.net2.0导出pdf文件完美...
·AspJpeg的安装与测试
·JS验证浏览器版本对IE11的支...
  热门浏览  
·IE8和IE9出现“此网页上的问...
·无线路由器密码破解,教你断...
·js替换所有回车换行符
·QQ/MSN在线交流代码
·IE弹出“中国工商银行防钓鱼...
·如何取消键盘上的一些快捷键...
·win7声音小的解决方法
·webdav漏洞的利用
·强制两端对齐的函数或者CSS...
·win7下成功安装sql server ...
·显示器分辨率调的过高导致电...
·天诺时空技术技术论坛
·js验证手机号码格式
·JS展开和收缩效果(二)
·本地计算机上的 MSSQLSERVE...
  碧海澜涛居
网站首页关于本站站长简介开发案例技术资料美文日志摄影相册读书收藏影视收藏留言板
版权所有:碧海澜涛 QQ:410436434 Email:shaopo_guo@163.com 苏ICP备15000526号
免责声明:本站为个人网站,站内所有文字、图片等各类资料均为个人兴趣爱好所收集,不用作任何商业用途,亦不保证资料的真实性,若有因浏览本站内容而导致的各类纠纷,本站也不承担任何责任。本站部分内容来自互联网,如有涉及到您的权益或隐私请联系站长解决。