写爬虫时遇到一些反爬虫--汇总
1.最最常见的就是封ip了
有条件呢,当然是买代理好,质量高,数量多;没有条件的,像我就是自己搭一个代理池,抓一些免费的高匿代理用用,因为我遇到的项目数据量要求不太大,足够使用了。给大家推荐一个代理池代理池,安装及其简便,很舒服
2.请求头
请求头有时候可能加了cookie,加了user_agent还是不返回数据,如果没有一些加密在其中的话,那么将网页中全部的请求头都添加进去会有奇效
3.登录
一些网站的数据可能非要登录才能获取,这个时候需要我们模拟登录。通过调试找到登录链接,找到需要传的参数,一般来说登录的账号密码都会加密,但是不会很复杂,我们通过参数名在全局中搜索一下,应该就能发现加密方式。
4.数据加密
- css使数据发生偏移
一些网站会在关键数据上面做一些手脚,我们轻易获得返回时可能会很高兴,但是返回的数据,跟显示的相去甚远,是让人头疼的。前端工程师通过css,使数据便宜,展现出来我们所看到的数据,解决办法通常是找所需数据标签内对应值,在css找出其偏离值,通过分析偏离规律,找出解决办法。 - 雪碧图展示数据
HTTP是基于TCP连接的,TCP连接的建立是需要时间和资源的。
而下载网页所需的图片资源是通过HTTP的。如果有非常多的小图片,就需要建立很多TCP连接。
勤劳勇敢的前端工作者们,想到把所有小图片放到一张图片里面去。这样就可以通过一次TCP链接,下载所有的小图片,再通过前端的奇技淫巧,来展示正确的图片。这种由很多小图片组成的图片,被称为雪碧图。(这段是抄的) 给大家看看雪碧图:
找出所需数值处标签内对应值,一般标签对应着长宽高像素大小,将雪碧图换成对应比例,根据像素位置找出对应字符
5.字体反爬
获取页面所用文本,使用foottool查看文本,找出其对应关系,替换即可
6.js加密
- js加密太多太多,只说一下,我一般的解决办法。在sourse中对我们所需数据打断点(在xhr里输入js的必经之词),若js简单,可尝试转换成python代码直接执行(需要一定js功底),若遇到大段js,需要动用execjs等工具执行js代码
- js混淆
太多太难,只写一种,找到混淆js代码,如果末尾是一些表情符号,找到表情符号最近的括号,将这一段删除,换成tostring。
7.滑块验证码
- 过程很复杂,大致是使用selenium移动滑块,并且需要模拟出人类的运动轨迹(网上代码很多,但是极验越来越强大,很多都不好用了)
- 花钱,打码平台欢迎你
8.selenium
神器介绍一下,虽然慢了一些,但是省了破解js等等之烦恼
- selenium+浏览器 两者版本必须对应
- implicitly_wait()隐形等待比time.sleep()强制等待更智能
- 可执行 点击,输入,清除,提交,获取文本等操作,以及可以实现键盘事件(如ctrl+a全选),鼠标事件右键、双击、拖动、移动
- 页面存在iframe或内嵌窗口时,可通过 switch_to_frame 跳转页面
9.HOOK
还没学会