0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

常见的反爬措施和应对方案

人工智能与大数据技术 来源:编程派 作者:编程派 2020-11-23 10:45 次阅读

爬虫是 Python 的一个常见应用场景,很多练习项目就是让大家去爬某某网站。爬取网页的时候,你大概率会碰到一些反爬措施。这种情况下,你该如何应对呢?本文梳理了常见的反爬措施和应对方案。

通过User-Agent来控制访问

无论是浏览器还是爬虫程序,在向服务器发起网络请求的时候,都会发过去一个头文件:headers,比如知乎的requests headers

这里面的大多数的字段都是浏览器向服务器”表明身份“用的

对于爬虫程序来说,最需要注意的字段就是:User-Agent

很多网站都会建立 user-agent白名单,只有属于正常范围的user-agent才能够正常访问。

爬虫方法:

可以自己设置一下user-agent,或者更好的是,可以从一系列的user-agent里随机挑出一个符合标准的使用。

缺点:

容易容易伪造头部,github上有人分享开源库fake-useragent

实现难度:★

IP限制

如果一个固定的ip在短暂的时间内,快速大量的访问一个网站,后台管理员可以编写IP限制,不让该IP继续访问。

爬虫方法:

比较成熟的方式是:IP代理池

简单的说,就是通过ip代理,从不同的ip进行访问,这样就不会被封掉ip了。

可是ip代理的获取本身就是一个很麻烦的事情,网上有免费和付费的,但是质量都层次不齐。如果是企业里需要的话,可以通过自己购买集群云服务来自建代理池。

缺点:

可以使用免费/付费代理,绕过检测

实现难度:★

SESSION访问限制

后台统计登录用户的操作,比如短时间的点击事件,请求数据事件,与正常值比对,用于区分用户是否处理异常状态,如果是,则限制登录用户操作权限。

缺点:

需要增加数据埋点功能,阈值设置不好,容易造成误操作。

爬虫方法:

注册多个账号、模拟正常操作。

实现难度:★★★

Spider Trap

蜘蛛陷阱导致网络爬虫进入无限循环之类的东西,这会浪费蜘蛛的资源,降低其生产力,并且在编写得不好的爬虫的情况下,可能导致程序崩溃。礼貌蜘蛛在不同主机之间交替请求,并且不会每隔几秒钟从同一服务器请求多次文档,这意味着“礼貌”网络爬虫比“不礼貌”爬虫的影响程度要小得多。

反爬方式:

创建无限深度的目录结构

HTTP://example.com/bar/foo/bar/foo/bar/foo/bar /

动态页面,为网络爬虫生成无限数量的文档。如由算法生成杂乱的文章页面。

文档中填充了大量字符,使解析文档的词法分析器崩溃。

此外,带蜘蛛陷阱的网站通常都有robots.txt告诉机器人不要进入陷阱,因此合法的“礼貌”机器人不会陷入陷阱,而忽视robots.txt设置的“不礼貌”机器人会受到陷阱的影响。

爬虫方法:

把网页按照所引用的css文件进行聚类,通过控制类里最大能包含的网页数量防止爬虫进入trap后出不来,对不含css的网页会给一个penalty,限制它能产生的链接数量。这个办法理论上不保证能避免爬虫陷入死循环,但是实际上这个方案工作得挺好,因为绝大多数网页都使用了css,动态网页更是如此。

缺点:

反爬方式1,2会增加很多无用目录或文件,造成资源浪费,也对正常的SEO十分不友好,可能会被惩罚。

实现难度:★★★

验证码验证

验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于 计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

1.图片验证码

复杂型

打码平台雇佣了人力,专门帮人识别验证码。识别完把结果传回去。总共的过程用不了几秒时间。这样的打码平台还有记忆功能。图片被识别为“锅铲”之后,那么下次这张图片再出现的时候,系统就直接判断它是“锅铲”。时间一长,图片验证码服务器里的图片就被标记完了,机器就能自动识别了。

简单型

上面两个不用处理直接可以用OCR识别技术(利用python第三方库--tesserocr)来识别。

背景比较糊

清晰可见

经过灰度变换和二值化后,由模糊的验证码背景变成清晰可见的验证码。

容易迷惑人的图片验证码

对于在这种验证码,语言一般自带图形库,添加上扭曲就成了这个样子,我们可以利用9万张图片进行训练,完成类似人的精准度,到达识别验证码的效果

2.短信验证码

用Webbrowser技术,模拟用户打开短信的行为,最终获取短信验证码。

3.计算题图片验证码

把所有可能出现的汉字都人工取出来,保存为黑白图片,把验证码按照字体颜色二值化,去除噪点,然后将所有图片依次与之进行像素对比,计算出相似值,找到最像的那张图片

4.滑动验证码

对于滑动验证码

我们可以利用图片的像素作为线索,确定好基本属性值,查看位置的差值,对于差值超过基本属性值,我们就可以确定图片的大概位置。

5.图案验证码

对于这种每次拖动的顺序不一样,结果就不一样,我们怎么做来识别呢?

利用机器学习所有的拖动顺序,利用1万张图片进行训练,完成类似人的操作,最终将其识别

利用selenium技术来模拟人的拖动顺序,穷尽所有拖动方式,这样达到是别的效果

6.标记倒立文字验证码

我们不妨分析下:对于汉字而言,有中华五千年庞大的文字库,加上文字的不同字体、文字的扭曲和噪点,难度更大了。

方法:首先点击前两个倒立的文字,可确定7个文字的坐标, 验证码中7个汉字的位置是确定的,只需要提前确认每个字所在的坐标并将其放入列表中,然后人工确定倒立文字的文字序号,将列表中序号对应的坐标即可实现成功登录。

爬虫方法:

接入第三方验证码平台,实时破解网站的验证码。

缺点:

影响正常的用户体验操作,验证码越复杂,网站体验感越差。

实现难度:★★

通过robots.txt来限制爬虫

robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。

robots.txt协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。注意robots.txt是用字符串比较来确定是否获取URL,所以目录末尾有与没有斜杠“/”表示的是不同的URL。robots.txt允许使用类似"Disallow: *.gif"这样的通配符。

itunes的robots.txt

缺点:

只是一个君子协议,对于良好的爬虫比如搜索引擎有效果,对于有目的性的爬虫不起作用

爬虫方法:

如果使用scrapy框架,只需将settings文件里的ROBOTSTXT_OBEY 设置值为 False

实现难度:★

数据动态加载

python的requests库只能爬取静态页面,爬取不了动态加载的页面。使用JS加载数据方式,能提高爬虫门槛。

爬虫方法:

抓包获取数据url

通过抓包方式可以获取数据的请求url,再通过分析和更改url参数来进行数据的抓取。

示例:

看 https://image.baidu.com 这部分的包。可以看到,这部分包里面,search下面的那个 url和我们访问的地址完全是一样的,但是它的response却包含了js代码。

2. 当在动物图片首页往下滑动页面,想看到更多的时候,更多的包出现了。从图片可以看到,下滑页面后得到的是一连串json数据。在data里面,可以看到thumbURL等字样。它的值是一个url。这个就是图片的链接。

3. 打开一个浏览器页面,访问thumbURL="https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1968180540,4118301545&fm=27&gp=0.jpg" 发现搜索结果里的图片。

4. 根据前面的分析,就可以知道,请求

URL="https://image.baidu.com/search/acjsontn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%8A%A8%E7%89%A9%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf8&oe=utf8&adpicid=&st=-1&z=&ic=0&word=%E5%8A%A8%E7%89%A9%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&pn=30&rn=30&gsm=1e&1531038037275=",用浏览器访问这个链接确定他是公开的。

5. 最后就可以寻找URL的规律,对URL进行构造便可获取所有照片。

使用selenium

通过使用selenium来实现模拟用户操作浏览器,然后结合BeautifulSoup等包来解析网页通过这种方法获取数据,简单,也比较直观,缺点是速度比较慢。

缺点:

如果数据API没做加密处理,容易曝光接口,让爬虫用户更容易获取数据。

实现难度:★

数据加密-使用加密算法

前端加密

通过对查询参数、user-agent、验证码、cookie等前端数据进行加密生成一串加密指令,将加密指令作为参数,再进行服务器数据请求。该加密参数为空或者错误,服务器都不对请求进行响应。

服务器端加密

在服务器端同样有一段加密逻辑,生成一串编码,与请求的编码进行匹配,匹配通过则会返回数据。

爬虫方法:

JS加密破解方式,就是要找到JS的加密代码,然后使用第三方库js2py在Python中运行JS代码,从而得到相应的编码。

案例参考:

https://blog.csdn.net/lsh19950928/article/details/81585881

缺点:

加密算法明文写在JS里,爬虫用户还是可以分析出来。

实现难度:★★★

数据加密-使用字体文件映射

服务器端根据字体映射文件先将客户端查询的数据进行变换再传回前端,前端根据字体文件进行逆向解密。

映射方式可以是数字乱序显示,这样爬虫可以爬取数据,但是数据是错误的。

破解方式:

其实,如果能看懂JS代码,这样的方式还是很容易破解的,所以需要做以下几个操作来加大破解难度。

对JS加密

使用多个不同的字体文件,然后约定使用指定字体文件方式,比如时间戳取模,这样每次爬取到的数据映射方式都不一样,映射结果就不一样,极大提高了破解的难度。

该种方式相比使用加密算法方式难度更高,因为加密算法是固定的几种,对方很容易获取并破解,而字体文件映射可以按任意规则映射,正常的数据使之错误显示,爬虫不容易察觉。

参考案例:https://www.jianshu.com/p/f79d8e674768

缺点:

需要生成字体文件,增加网站加载资源的体量。

实现难度:★★★★

非可视区域遮挡

此方式主要针对使用senlium进行的爬虫,如果模拟界面未进入可视区域,则对未见数据进行遮挡,防止senlium的click()操作。这种方式只能稍稍降低爬虫的爬取速度,并不能阻止继续进行数据爬取。

实现难度:★

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    9028

    浏览量

    85199
  • 开源
    +关注

    关注

    3

    文章

    3256

    浏览量

    42418
  • 爬虫
    +关注

    关注

    0

    文章

    82

    浏览量

    6845

原文标题:可能是最全的反爬虫及应对方案

文章出处:【微信号:TheBigData1024,微信公众号:人工智能与大数据技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    变电站故障处理应对措施

    在电力系统中,变电站扮演着电流与电压交换、分配的关键角色。然而变电站可能遇到一系列故障问题,本文将重点探讨变电站常见故障的诊断及处理策略。 变电站电压互感器故障应对措施 应对电压互感器
    的头像 发表于 08-15 17:21 384次阅读

    如何理解PCB设计的电距离?

    一站式PCBA智造厂家今天为大家讲讲PCB设计电距离要求与走线规则有哪些?PCB设计电距离要求与走线规则。在PCB设计中,电距离和走线规则是关键的考虑因素,尤其是在高压电路和高频电路的设计中
    的头像 发表于 08-15 09:23 893次阅读

    远程IO常见报错及解决方案,轻松应对远程控制难题

    随着科技的发展,远程IO技术在工业、医疗、家居等领域得到了广泛应用。然而,在使用过程中,我们难免会遇到一些报错问题。本文将为您盘点远程IO常见报错及解决方案,让您轻松应对远程控制难题。
    的头像 发表于 07-23 18:19 1413次阅读

    QFN锡不好如何解决?—SMT锡膏

    QFN封装的芯片IC,侧面引脚锡是个大难题,经常会遇到一些客户反馈:qfn锡不好怎么解决?qfn芯片引脚标准上锡高度如何确定?qfn侧面不锡?下面由深圳佳金源锡膏厂家来讲解一下:一、QFN锡膏
    的头像 发表于 07-17 16:07 858次阅读
    QFN<b class='flag-5'>爬</b>锡不好如何解决?—SMT锡膏

    电距离是根据什么确定的

    电距离(Creepage Distance)是指在电气设备中,两个导体之间沿绝缘材料表面的距离。它是一个重要的电气参数,用于评估电气设备在正常工作和故障条件下的绝缘性能。电距离的确定涉及到多个
    的头像 发表于 07-12 15:39 768次阅读

    电距离用什么检测设备

    电距离是指在电气设备中,不同电位的导体之间,通过绝缘材料隔离的最短距离。电距离的检测对于确保电气设备的安全运行至关重要。本文将介绍电距离的检测设备及其使用方法。 一、电距离检测
    的头像 发表于 07-12 15:37 500次阅读

    EMI(电磁干扰):原理、影响与应对措施

    EMI(电磁干扰):原理、影响与应对措施?|深圳比创达电子EMC
    的头像 发表于 03-26 11:22 2044次阅读
    EMI(电磁干扰):原理、影响与<b class='flag-5'>应对</b><b class='flag-5'>措施</b>?

    pcb的电距离之解决方案大全

    pcb的电距离之解决方案大全
    的头像 发表于 03-14 15:26 1518次阅读

    电源芯片短路恢复过冲的风险及应对措施

    电源芯片短路恢复过冲的风险及应对措施 电源芯片是电子产品中非常重要的组成部分,其稳定工作对整个电子设备的正常运行至关重要。然而,电源芯片在使用过程中可能会遇到短路和过冲的风险,给设备带来的损害甚至
    的头像 发表于 02-06 09:46 1834次阅读

    晶振温度漂移:原理、影响因素与应对措施

    晶振温度漂移:原理、影响因素与应对措施 晶振温度漂移是指晶振器在不同温度下频率发生改变的现象。晶振温度漂移是一个晶振器的重要性能指标,特别是对于高精度和高稳定性要求的应用场合。了解晶振温度漂移
    的头像 发表于 01-26 17:14 1376次阅读

    车用SiC碳化硅的五大难点和应对方案

    车用SiC碳化硅的五大难点和应对方案近年来,包括SiC在内的第三代半导体器件在汽车上的应用比例与日俱增。但在专业人士看来,这并不会是一个简单的事情。一以车用引线框架来看,尽管Si、碳化硅/氮化镓引线
    的头像 发表于 01-06 14:22 823次阅读
    车用SiC碳化硅的五大难点和<b class='flag-5'>应对方案</b>

    PID自动控制回路的振荡问题与应对方

    在工业自动化控制领域,PID自动控制回路的应用非常广泛。然而,在使用过程中,我们常常会遇到各种振荡问题,如同相位振荡、异相位振荡和非平滑振荡等。这些问题不仅会导致装置的不稳定,还可能影响整个生产过程的安全和效率。本文将分享这三种振荡的特征及相应的应对方法,以供参考。
    的头像 发表于 12-28 09:10 1.5w次阅读
    PID自动控制回路的振荡问题与<b class='flag-5'>应对方</b>法

    电源电压变化对晶振性能的影响以及应对方

    电源电压变化对晶振性能的影响以及应对方法  电源电压的变化是指电源输入电压的波动或变化,它可能产生一系列的问题,对晶振的性能和工作稳定性产生影响。本文将详细讨论电源电压变化对晶振的影响,并提供应对方
    的头像 发表于 12-18 14:09 1254次阅读

    电距离和电气间隙的区别

    电距离和电气间隙的区别  电距离和电气间隙是电力系统中两个重要的概念,它们在电力设备的设计、运行和维护中起着关键的作用。本文将详细解释这两个概念的含义、区别以及它们在电力系统中的应用。 首先
    的头像 发表于 12-08 10:26 2454次阅读

    云服务器被攻击应对方

    当云服务器受到攻击时,采取适当的应对策略是关键,以确保系统的安全和可用性。下面,小编给大家简单总结一下云服务器被攻击应对方法: 1、监控和检测:部署实时监控系统,定期审查日志,以便及时发现异常活动
    的头像 发表于 12-06 17:44 777次阅读