一、反爬与反反爬
1.1 反爬的类型
- 信息校验型:例如用户身份的验证
- 动态渲染型:动态数据
- 文本混淆型:字体加密、CSS偏移反爬
- 特征识别型:爬虫特征
1.2 反反爬的介绍
反反爬的主要思路->尽可能的去模拟浏览器对服务器发起请求,浏览器中认为如何操作,代码中就如何去实现。
例如:浏览器中先请求了url1,然后获取到服务器返回的cookie保存在本地,然后再去请求url2,此时就会带上url1返回的cookie进行请求,如果没有携带这个cookie就会请求失败
1.2.1 请求头参数验证
1.2.1.1 通过User-Agent字段来反爬
- 反爬原理:默认情况下,通过requests库发起请求的时候是没有User-Agent字段的,因此服务器直接认出了我们的爬虫(裸奔)
- 解决办法:在请求之前,将User-Agent封装到请求头中进行请求,最好是搭建一个UA池
1.2.1.2 referer字段验证
- 反爬原理:默认情况下并没有携带referer字段
- 解决办法:添加referer字段(例如B站评论、腾讯课堂评论)
1.2.1.3 cookie验证
- 反爬原理:服务器通过cookie来验证用户的身份是否是正常访问用户身份,通过为访问用户设定一定的特征参数实现,如果目标网站并不需要登录,那么只需要带上上一次返回的cookie进行请求即可,使用session最佳
- 解决办法:携带着网站中返回的cookie进行访问,如果网站需要登录,那么通过搭建账号池来进行请求,或者通过账号池进一步搭建cookie池
1.2.2 通过js来反爬
正常情况下,浏览器会自动运行服务器返回的js代码,然后将js代码执行后的结果进行渲染后显示在浏览器中,所以,就目前市场上存在的网站而言,基本上99%的网站的页面都是经过了js渲染之后的结果。
1.2.2.1 通过js实现数据的加密
- 反爬原理:通过js代码将数据或者需要验证的参数进行加密
- 解决办法:模拟数据或参数的加密
二、MD5与base64加密介绍(js常见加密)
Hash,译做“散列”,也有直接音译为“哈希”的。把任意长度的输入,通过某种hash算法,变换成固定长度的输出,该输出就是散列值,也称摘要值。该算法就是哈希函数,也称摘要函数。
MD5的固定