更多>>关于我们
西安鲲之鹏网络信息技术有限公司从2010年开始专注于Web(网站)数据抓取领域。致力于为广大中国客户提供准确、快捷的数据采集相关服务。我们采用分布式系统架构,日采集网页数千万。我们拥有海量稳定高匿HTTP代理IP地址池,可以有效获取互联网任何公开可见信息。
您只需告诉我们您想抓取的网站是什么,您感兴趣的字段有哪些,你需要的数据是哪种格式,我们将为您做所有的工作,最后把数据(或程序)交付给你。
数据的格式可以是CSV、JSON、XML、ACCESS、SQLITE、MSSQL、MYSQL等等。
更多>>技术文章
如何突破防采集策略-数据加密
发布时间:2012-05-29
目前常见的Web反采集策略大概有以下几种:
- 1)数据加密;
- 2)限制访问频率;
- 3)数据以非文本形式展现;
- 4)验证码保护;
- 5)Cookie验证;
本文主要探讨一下如何突破“数据加密”:
反采集策略 - “数据加密”的原理:
- Web服务器端脚本将HTML文档中的部分数据加密,然后发送给HTTP客户端(浏览器)。
- 浏览器使用JavaScript将密文还原成文明后显示。
突破的方法:
根据JavaScrip解密算法源码,实现自己采集程序所需还原算法,在接收到服务器应答数据后,先对数据进行解密,然后再进行提取。
一个实例:
Whitepages的电话(手机)号码是这样输出的:
<script type="text/javascript" >
// <![CDATA[ document.write(WPOL.Util.rotDecode('(57) 1771 3775')); // ]]> </script>
在浏览器中看到的电话号码为:(02) 6226 8220,而不是”(57) 1771 3775“,如下所示:
在源码中可以找到WPOL.Util.rotDecode的源码如下:
rotDecode: function(C) { var B, A = ""; for (B = 0; B < C.length; B++) { var E = C.charAt(B); if (/[a-zA-Z]/.test(E)) { var D = /[A-Z]/.test(E) ? "A": "a"; A += String.fromCharCode((E.charCodeAt(0) - D.charCodeAt(0) + 39) % 26 + D.charCodeAt(0)) } else { if (/[0-9]/.test(E)) { A += String.fromCharCode((E.charCodeAt(0) - 48 + 15) % 10 + 48) } else { A += E } } } return A
我们的采集程序是采用Python编写的,所以需要根据上述代码实现我们自己的解密算法,如下:
def phone_decode(phone_en): """Decode whitepages phone number """ phone_de = '' for c in phone_en: if re.compile(r'[a-zA-Z]').search(c): if re.compile(r'[A-Z]').search(c): d = 'A' else: d = 'a' phone_de += chr((ord(c) - ord(d) + 39) % 26 + ord(d)) else: if re.compile(r'[0-9]').search(c): phone_de += chr((ord(c) - 48 + 15) % 10 + 48) else: phone_de += c return phone_de
测试:
特别说明:本文旨在技术交流,请勿将涉及的技术用于非法用途,否则一切后果自负。如果您觉得我们侵犯了您的合法权益,请联系我们予以处理。
☹ Disqus被Qiang了,之前所有的评论内容都看不到了。如果您有爬虫相关技术方面的问题,欢迎发到我们的问答平台:http://spider.site-digger.com/