网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
一、通过User-Agent来控制访问
无论是浏览器还是爬虫程序,在向服务器发起网络请求的时候,都会发过去一个头文件:headers
,比如知乎的requests headers
这里面的大多数的字段都是浏览器向服务表明身份用的
对于爬虫程序来说,最需要注意的字段就是:User-Agent
很多网站都会建立user-agent
白名单,只有属于正常范围的user-agent才能够正常访问。
解决方法:
可以自己设置一下user-agent
,或者更好的是,可以从一系列的user-agent里随机挑出一个符合标准的使用。
实现难度:★
二、IP限制
如果一个固定的ip在短暂的时间内,快速大量的访问一个网站,后台管理员可以编写IP限制,不让该IP继续访问。
解决方法:
比较成熟的方式是:IP代理池
img
简单的说,就是通过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十分不友好,可能会被惩罚。
实现难度:★★★
五、验证码
验证码是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式.
1. 图片验证码
- 复杂型
打码平台雇佣了人力,专门帮人识别验证码。识别完把结果传回去。总共的过程用不了几秒时间。这样的打码平台还有记忆功能。图片被识别为“锅铲”之后,那么下次这张图片再出现的时候,系统就直接判断它是“锅铲”。时间一长,图片验证码服务器里的图片就被标记完了,机器就能自动识别了。
- 简单型
img
上面两个不用处理直接可以用OCR识别技术(利用python第三方库–esserocr
)来识别。
背景比较糊
清晰可见
经过灰度变换和二值化后,由模糊的验证码背景变成清晰可见的验证码。
img
容易迷惑人的图片验证码
对于在这种验证码,语言一般自带图形库,添加上扭曲就成了这个样子,我们可以利用9万张图片进行训练,完成类似人的精准度,到达识别验证码的效果
2. 短信验证码
用ebbrowser
术,模拟用户打开短信的行为,最终获取短信验证码。
3. 计算题图片验证码
把所有可能出现的汉字都人工取出来,保存为黑白图片,把验证码按照字体颜色二值化,去除噪点,然后将所有图片依次与之进行像素对比,计算出相似值,找到最像的那张图片
4. 滑动验证码
对于滑动验证码
我们可以利用图片的像素作为线索,确定好基本属性值,查看位置的差值,对于差值超过基本属性值,我们就可以确定图片的大概位置。
5. 图案验证码
对于这种每次拖动的顺序不一样,结果就不一样,我们怎么做来识别呢?
-
利用机器学习所有的拖动顺序,利用1万张图片进行训练,完成类似人的操作,最终将其识别
-
利用selenium技术来模拟人的拖动顺序,穷尽所有拖动方式,这样达到是别的效果
6. 标记倒立文字验证码
我们不妨分析下:对于汉字而言,有中华五千年庞大的文字库,加上文字的不同字体、文字的扭曲和噪点,难度更大了。
方法:首先点击前两个倒立的文字,可确定7个文字的坐标, 验证码中7个汉字的位置是确定的,只需要提前确认每个字所在的坐标并将其放入列表中,然后人工确定倒立文字的文字序号,将列表中序号对应的坐标即可实现成功登录。
解决方法:
接入第三方验证码平台,实时破解网站的验证码。
缺点:
影响正常的用户体验操作,验证码越复杂,网站体验感越差。
实现难度:★★
七、通过robots.txt来限制爬虫
robots.txt
(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。
robots.txt
协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。注意robots.txt是用字符串比较来确定是否获取URL,所以目录末尾有与没有斜杠“/”表示的是不同的URL。
缺点:
只是一个君子协议,对于良好的爬虫比如搜索引擎有效果,对于有目的性的爬虫不起作用
解决方法:
如果使用scrapy框架,只需将settings文件里的ROBOTSTXT_OBEY
设置值为 False
实现难度:★
八、数据动态加载
python的requests库只能爬取静态页面,爬取不了动态加载的页面。使用JS加载数据方式,能提高爬虫门槛。
解决方法:
- 抓包获取数据url
通过抓包方式可以获取数据的请求url,再通过分析和更改url参数来进行数据的抓取。
做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。
别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。
我先来介绍一下这些东西怎么用,文末抱走。
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
(4)200多本电子书
这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。
基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。
(5)Python知识点汇总
知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。
(6)其他资料
还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。
这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!