那些年绕过的反爬手段

笔者第一份工作就是以java工程师的名义写爬虫,不得不说第一份工作很重要啊,现在除了爬虫不会干别的,到现在已经干了近5年了,期间经历了不少与反爬策略的斗争。最近又耗时两周成功搞定了某网站的反爬策略后,心里有点莫名的惆怅。今日无心工作,就总结下这些年与网站互怼的经验吧。

无反爬裸站

现在一个网站或多或少都会配置一定的反爬措施,毕竟现在一台笔记本的性能比某些小站的服务器都强,如果不加以限制,分分钟就能把你的资源耗尽。前两年的工商网站有个省份没有限制,没多久就把服务器抓瘫了(只能说服务器配置太太太次了);如果你服务器能抗那就更好了,用不了多久就能把你全站数据抓下来。记得两年前收集企业名录,一个网站几百万条用了不到两个小时就抓完了。但现在心态变了,如果遇到一个没有验证码的网站,我都会尽量抓得慢一点。毕竟都是搞编程的,你如果把人家抓急了,逼得他改网站,改完后自己还得跟着改,冤冤相报何时了?在此也希望大家能手下留情,不要遇见个好欺负的就往死里整,毕竟咱们要的是数据,又不是来寻仇的。

验证码

验证码可以说是最基本最常见的反爬策略了,但在某种程度上也是最容易破解的。

弱验证码

这里说的弱验证码就是那种直接扔给tesseract就能识别出来的,或者经过简单处理。比如

上面两种验证码,第一种不用任何处理直接用pytesseract就可以识别。第二种经过简单的灰度变换->二值化后能得到比较干净清晰的图像,再用tesseract就可以识别了。如下图

假验证码

假验证码就是那种用来吓唬人的验证码。比如之前某汽活动页上面的验证码会隐藏在页面中,点击提交时会用js判断验证码是否正确。还有的网站验证码就是摆设,提交的表单中根本就没有验证码参数。

强验证码

像下面这种验证码可以算是正常的验证码了,由于有变形与粘连,简单的处理已经无法识别了。

对于这种验证码用神经网络可以达到很高的识别率,但训练耗时较长(如果有gpu会快很多),而且需要大量标注的样本。笔者用了2万个样本做训练,识别率能达到86%左右。

神经网络有个缺陷是只能识别“学习”过的样本,对于英文加数字来说除去大小写只有36种可能,所以识别率会很高。但识别难度与训练强度会随着分类数量成指数级提高。所以笔者认为,使用中文做验证码并对图像做混淆粘连处理后就可以算是强验证码了(话不能说太满,毕竟我只是个数学很差的专科生)。

请求限制

即对请求速度有限制,或封禁的手段

伪封ip

为什么要加个“伪”字呢?因为对于某些网站,它们会将某些请求头中的ip看作用户的真实ip,比如X-Forwarded-ForX-Real-IPVia。对于这种网站该怎么做不用我多说了吧。之前某些省份的工商网站就用了这种手段。

ua限制

即User-Agent,有些网站用User-Agent当作用户的惟一标识,这种手段会有很大的误伤,所以很少见,一般只出现在小网站上。

cookie

某些网站会通过set-cookie将请求次数写在用户的cookie里,写代码时只要禁用cookie就行了。

加密

常用的加密算法也就那几种:对称加密的AES, DES;消息摘要的md5, sha1;此外还有使用定制的base64编码;笔者在网页中还没见过到使用非对称加密的,在app中也很少见到。

对于对称加密只要找到密钥就没事了,如果AES使用的CBC模式,还需要找出iv。关于AES的ECB, CBC工作模式大家可以百度下。

消息摘要一般用来作签名,服务端会用它判断请求参数是否被非法篡改。这也不难,一般是把参数值(有时也包含参数名)按一定顺序再加上某些计算就能得到。

对于定制的base64,只要找出未公开的码表就行了,这个之前有人分享过。好像新版的极验里就有用到。

非对称加密一般很少见,但现在的app更多的会用到SSL Certificate Pinning技术。不知大家有没有遇到过某些app,一使用burp suite或fiddler抓包就无法联网,关上代理后就正常了,这就是ssl证书绑定,简单来说就是app使用自签名的证书与服务端建立ssl。https协议在建立连接之前客户端会将预置的公钥和服务端返回的证书做比较。如果一致,就建立连接,否则就拒绝连接,从而导致程序无法联网。关于SSL pinning的详情与破解可以参考这篇文章突破https——https抓包

其他渠道

有时网站的反爬做得比较厉害,继续怼的话要么太费时要么太费力,这时不妨换个路子。比如去年有段时间裁判文书网用了某数的waf,分析了将近一个月没有成果,但发现该网站还有个app,做得特别low,经过简单抓包逆向后成功拿到数据,而且数据还是json格式化后的,连解析都省了。还有的网站pc端是www.xxx.com,如果换成移动端的ua会变成m.xxx.com,而一般移动端的页面比较简洁,反爬策略可能与主站不一样。通过查找子域名可能会有收获。

以上是暂时想到的一些经验,希望能有所帮助,同时也希望大家在抓数据的时候能够手留情别抓得太狠,如果把一个数据源抓废了对大家都不好,正好那句话说的,IT人何苦为难IT人。

原文地址:https://www.cnblogs.com/h2zZhou/p/8674341.html

时间: 2024-08-30 12:56:31

那些年绕过的反爬手段的相关文章

使用 mitmdump 进行 selenium webDriver绕过网站反爬服务的方法 pdd某宝 可用

安装:  pip install  mitmproxy 新建一个脚本 脚本代码: 1 from mitmproxy import ctx 2 3 injected_javascript = ''' 4 // overwrite the `languages` property to use a custom getter 5 Object.defineProperty(navigator, "languages", { 6 get: function() { 7 return [&qu

python爬取数据被限制?一招教你伪造反爬技术!

1.Headers限制 这应该是最常见的,最基本的反爬虫手段,主要是初步判断你是否是真实的浏览器在操作. 这个一般很好解决,把浏览器中的Headers信息复制上去就OK了. 值得注意的是,很多网站只需要userAgent信息就可以通过,但是有的网站还需要验证一些其他的信息,比如知乎,有一些页面还需要 authorization 的信息.所以需要加哪些Headers,还需要尝试,可能还需要Referer.Accept-encoding等信息. 2.IP限制 限制IP也是很多网站反爬虫的初衷,有些人

大厂在用的Python反爬虫手段,破了它!

SVG 映射反爬虫 SVG 是用于描述二维矢量图形的一种图形格式.它基于 XML 描述图形,对图形进行放大或缩小操作都不会影响图形质量.矢量图形的这个特点使得它被广泛应用在 Web 网站中. 接下来我们要了解的反爬虫手段正是利用 SVG 实现的,这种反爬虫手段用矢量图形代替具体的文字,不会影响用户正常阅读,但爬虫程序却无法像读取文字那样获得 SVG 图形中的内容.由于 SVG 中的图形代表的也是一个个文字,所以在使用时必须在后端或前端将真实的文字与对应的 SVG 图形进行映射和替换,这种反爬虫手

Python爬虫|深入请求(四)常见的反爬机制以及应对方法

作者:David Qian 链接:https://zhuanlan.zhihu.com/p/21558661 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 大家好!我是厦门大学王亚南经济研究院的大一学生,今天将由我来为大家介绍一下常见的反爬机制以及应对方法. 注:非商业转载注明作者即可,商业转载请联系作者授权并支付稿费.本人已授权"维权骑士"网站(http://rightknights.com)对我在知乎发布文章的版权侵权行为进行追究与维权. ---

常见的反爬机制及应对策略

1.Headers: 从用户的headers进行反爬是最常见的反爬策略,Headers是一种最常见的反爬机制Headers是一种区分浏览器行为和机器行为中最简单的方法,还有一些网站会对Referer (上级链接)进行检测 从而实现爬虫. 相应的解决措施:通过审查元素或者开发者工具获取相应的headers 然后把相应的headers 传输给python 的requests,这样就能很好地绕过. 2.IP 限制 一些网站会根据你的IP 地址访问的频率,次数进行反爬.也就是说如果你用单一的IP 地址访

如何处理网站的反爬

做爬虫,碰到最多的问题不是代码bug,而是封IP.开发好一个爬虫,部署好服务器,然后开始抓取信息,不一会儿,就提示封IP了,这时候的内心是崩溃的.那么,有什么办法不封IP呢?首先,要知道为什么会封IP,这样才能更好的避免封IP.有些网站反爬措施比较弱,伪装下IP就可以绕过了,修改X-Forwarded-for就万事大吉.但现在这样的网站比较少了,大部分的网站的反爬措施都在不断加强,不断升级,这给避免封IP带来更大的困难.有人说,使用代理IP就万事大吉了.诚然,使用大量的优质代理IP可以解决大部分

第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略

第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-爬虫和反爬的对抗过程以及策略-scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scrapy架构源码分析图

爬虫与反爬

爬虫与反爬 (1) 基本的概念 爬虫: 自动获取网站数据的程序 关键是 定时,定量的,批量的获取 反爬虫: 使用技术手段 防止爬虫程序的方法 存在误伤,即 反爬技术 将普通用户识别为爬虫 如果误伤高 --- 效果再好也不能使用 例子: 比如 限制 ip === 用户的ip 一般都是 局域网内动态分配的, 一个爬虫的ip 可能分配给 另一个 非爬虫的用户 有效的方法: 可以在一段时间内 限制 ip,过一段时间 再把 ip释放 反爬的成本: 成功率越高成本越大,拦截率越高,误伤率越高 反爬虫的目的:

python解析字体反爬

爬取一些网站的信息时,偶尔会碰到这样一种情况:网页浏览显示是正常的,用python爬取下来是乱码,F12用开发者模式查看网页源代码也是乱码.这种一般是网站设置了字体反爬 一.58同城 用谷歌浏览器打开58同城:https://sz.58.com/chuzu/,按F12用开发者模式查看网页源代码,可以看到有些房屋出租标题和月租是乱码,但是在网页上浏览却显示是正常的. 用python爬取下来也是乱码: 回到网页上,右键查看网页源代码,搜索font-face关键字,可以看到一大串用base64加密的字