<强> 1,判断请求头来进行反爬强>
这是很早期的网站进行的反爬方式
用户代理用户代理
推荐人请求来自哪里
饼干也可以用来做访问凭证
解决办法:请求头里面添加对应的参数(复制浏览器里面的数据)
<强> 2,根据用户行为来进行反爬强>
请求频率过高,服务器设置规定时间之内的请求阈值
解决办法:降低请求频率或者使用代理(IP代理)
网页中设置一些陷阱(正常用户访问不到但是爬虫可以访问到)
解决办法:分析网页,避开这些特殊陷阱
请求间隔太短,返回相同的数据
解决办法:增加请求间隔
<强> 3,js加密强>
反爬方式中较为难处理的一类。
js加密的原理:服务器响应给浏览器的js文件,可以动态的生成一些加密参数,浏览器会根据js的计算得到这些参数,在请求中带入进来,如果请求中没有这些参数,那么服务器就任务请求无效。
<强> 4字体加密强>
字体反爬,是一种常见的反爬技术,网站采用了自定义的字体文件,在浏览器上正常显示,但是爬虫抓取下来的数据要么就是乱码,要么就是变成其他字符。采用自定义字体文件是CSS3的新特性,熟悉前端的同学可能知道,就是字体属性。
<强> 5,登录验证码强>
使用Python爬取网页内容时往往会遇到使用验证码登陆才能访问其网站,不同网站的使用的验证码也不同,在最开始使用简单验证码,识别数字,但是随着反爬的不断发展,慢慢设计出了更多复杂的验证码,比如:内容验证码,滑动验证码,图片拼接验证码等等。
网上有很多打码平台,通过注册账号,调用平台接口,进行验证码的验证。
<强> 6,md5相关知识强>
MD5,消息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(散列值),用于确保信息传输完整一致.MD5是最常见的摘要算法、速度很快,生成结果是固定的128位字节,通常用一个32位的16进制字符串表示.MD5的特点:
1.不可逆:不能从密文推导出明文。
2.不管明文长度为多少,密文的长度都固定。
3 .密文之间不会重复。
进口hashlib 打印(hashlib.md5 (python的.encode ()) .hexdigest ())
字符串python加密后的结果:
23 eeeb4347bdd26bfc6b7ee9a3b755dd引用>
<强> 7,base64 强>
Base64是网络上最常见的用于传输8位字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
进口base64 # python中base64的加密 打印(base64.b64encode (python的.encode ()) .decode ()) # python中base64的解密 print (base64.b64decode (“Y2hpbmE=' .encode ()) .decode ())结果:
cHl0aG9u
中国<强>二、验证码验证强>
自己动手看验证码(古诗词网)
进口的要求 url=" gushiwen.org " 会话=requests.Session () 文本=session.get。text (url) #解析响应,找到验证码的图片地址, #下载验证码图片,保存 张开(“code.jpg”,“世界银行”)f: f.write(“验证码的url地址”.encode ()) 代码=输入(“验证码是:') login_url=" login.com " data=https://www.yisu.com/zixun/{“用户名”:“xx”, “密码”:“xx”, “代码”:代码 } 请求。帖子(url, data=https://www.yisu.com/zixun/data)使用打码平台(图鉴)
新建一个captcha_api.py
进口json 进口的要求 进口base64 从io进口BytesIO 从公益诉讼导入图像 从系统导入version_info def base64_api (uname pwd, img): img=img.convert (RGB) 缓冲=BytesIO () img。保存(缓冲格式=癑PEG”) 如果version_info。主要在=3: b64=str (base64.b64encode (buffered.getvalue()),编码=皍tf - 8”) 其他: b64=str (base64.b64encode (buffered.getvalue ())) data=https://www.yisu.com/zixun/{“用户名”:uname,“密码”:pwd,“图像”:b64} 结果=json.loads (requests.post (" http://api.ttshitu.com/base64 " json=数据)。text) 如果结果(成功的): 返回结果(“数据”)(“结果”) 其他: 返回结果(“信息”) 返回" def request_captcha (uname pwd, img_path): img_path=img_path #待验证的验证码路径 img=Image.open (img_path) 结果=base64_api (uname pwd, img) #传入账号密码和图片 打印(结果)python常见的反爬虫策略