Python爬虫突破反爬虫机制知识点总结
作者:pycn 发布时间:2021-09-17 12:38:22
1、构建合理的HTTP请求标头。
HTTP的请求头是一组属性和配置信息,当您发送一个请求到网络服务器时。因为浏览器和Python爬虫发送的请求头不同,反爬行器很可能会被检测到。
2、建立学习cookie。
Cookie是一把 * 剑,有它不行,没有它更不行。站点将通过cookie来追踪你的访问情况,如果发现你有爬虫行为,将立即中断您的访问,例如,填写表格时速度过快,或在短时间内浏览大量网页。而且对cookies的正确处理,也可以避免许多采集问题,建议在收集网站的过程中,检查一下这些网站生成的cookie,然后想想哪个是爬虫需要处理的。
3、正常时差路径。
Python爬行器不应破坏采集速度的原则,尽可能在每一页访问时间内增加一小段间隔,能有效地帮助您避免反爬行。
4、使用 * ,对已经遇到过反爬虫的分布式爬虫来说,使用 * 将成为您的首选。
谈到Python爬虫的发展历史,那简直就是与反爬虫相恋的血泪史。因特网上,有网络爬虫的地方,绝对少不了反爬虫的身影。对网站进行反爬虫的截取,前提是要正确区分人与网络机器人,发现可疑目标时,通过限制IP地址等措施,阻止您继续访问。
知识点扩展:
python3爬虫--反爬虫应对机制
前言:
反爬虫更多是一种攻防战,网络爬虫一般有网页爬虫和接口爬虫的方式;针对网站的反爬虫处理来采取对应的应对机制,一般需要考虑以下方面:
①访问终端限制:这种可通过伪造动态的UA实现;
②访问次数限制:网站一般通过cookie/IP定位,可通过禁用cookie,或使用cookie池/IP池来反制;
③访问时间限制:延迟请求应对;
④盗链问题:通俗讲就是,某个网页的请求是有迹可循的,比如知乎的问题回答详情页,正常用户行为必然是先进入问题页,在进入回答详情页,有严格的请求顺序,如果之间跳过前面请求页面就有可能被判定为到了,通过伪造请求头可以解决这个问题;
具体的反爬虫策略:
①验证码
应对:简单的验证码可通过机器学习识别,准确率可高达,50-60%;复杂的可通过专门的打码平台人工打码(依据验证码的复杂度,打码工人平均每码收1-2分钱)
②封ip(容易误杀)
应对:通过ip代理池/vps拨号获取ip方式,可用低成本的获取几十万ip
③滑动验证码:相比常规的验证码易被机器学习识别,滑动验证有一定的优势
应对:模拟滑动来验证
④关联上下文/防盗链:利用token/cookie的记录能力,来关联请求的上下文,通过判断请求是否走了完整的流程来判定是否是爬虫;重而反爬虫(知乎,头条都有该机制)
应对:分析协议,进行全量模拟
⑤javascript 参与运算:利用简单爬虫无法进行json运算的特征,对中间结果进行js解析/运算
应对:可以通过自带 js 引擎模块或直接使用 phantomjs 等无端浏览器进行自动化解析
⑥session封禁:session请求超过阈值,从而封禁(容易导致误杀)
⑦UA封禁:ua请求超过阈值,从而封禁(容易导致误杀)
⑧web-fongt反爬虫机制:源代码不展示内容,而是提供字符集,在页面使用了font-face定义了字符集,并通过unicode去映射展示
⑨其他:比如代码混淆、动态加密方案、假数据等方式
来源:https://www.py.cn/spider/guide/34745.html


猜你喜欢
- 使用JS对Json数据的处理,项目遇到需要对Json数据进行相关操作,比如增删改操作,本以为会比较难,网上搜索下,发现还是比较简单的,贴一段
- //-------------------------------------------- // 删除千分点。 //-----------
- 方案有很多种,我这里简单说一下:1. into outfileSELECT * FROM mytable  
- 在此之前,我写了两篇关于ASP结合XML的贴子,分别介绍了用XML取代数据库和用XML整合数据库这两方面的技术,让数据库在某种情况下不再是我
- var _change = { &
- 当你执行大型程序的时候,突然出现exception,会让程序直接停止,这种对服务器自动程序很不友好,而python有着较好的异常捕获机制,不
- Ctrl+N 按文件名搜索py文件ctrl+n可以搜索py文件勾选上面这个框可以搜索工程以外的文件Ctrl+shift+N 按文件名搜索所有
- 在IE下测试,发现最大值是:18014398509481984(0x40000000000000)另外发现一个奇怪的问题:JS世界居然不存在
- 我就废话不多说了,大家还是直接看代码吧!# python输入一个水仙花数(三位数) 输出百位十位个位"""从控
- 举个例子:q=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]我想获取其中值等于7的那个值的下标,以便于用于其
- 备份MySQL数据库的命令mysqldump -hhostname -uusername -ppassword
- 以前我也写过一个注册表类,不过那一个不能进行多个类的注册,下面用数组对类进行了存储。 <?php //基础类 class webSit
- # 半夜撸代码 正在一顿操作猛如虎的时候,发现删了其中一张表的某条记录,结果发现其他表跟这个字段的关联的也都被删除,我已经写了d
- 主要用到 str.charCodeAt()和 String.fromCharCode()方法--》使用 charCodeAt() 来获得字符
- 问题描述:ImportError: No module named ‘XXXX'解决方式一: 将XXXX包放在python的site
- Python爬虫分析前言:计算机行业的发展太快了,有时候几天不学习,就被时代所抛弃了,因此对于我们程序员而言,最重要的就是要时刻紧跟业界动态
- 本文实例为大家分享了微信小程序实现扫雷游戏的具体代码,供大家参考,具体内容如下实验小提醒,打开微信小程序模板时,一定要看清楚,要选js模板,
- 开篇语本文主要是回顾下从项目创建到生成数据到数据库(代码优先)的全部过程。采用EFCore作为ORM框架。本次示例环境:vs2019、net
- 在windows+iis服务器上运行asp程序可能会出现数据库无法更新的情况,具体错误信息可能为: 1、Microsoft JET Data
- 小程序miniso的一个发布内容截图功能,话不多,先上代码wxml文件:<view class="cut-1-1 t-c {