python常见的反爬虫策略

  

<强> 1,判断请求头来进行反爬

  

这是很早期的网站进行的反爬方式

  

用户代理用户代理
  推荐人请求来自哪里
  饼干也可以用来做访问凭证
  解决办法:请求头里面添加对应的参数(复制浏览器里面的数据)

  

<强> 2,根据用户行为来进行反爬

  

请求频率过高,服务器设置规定时间之内的请求阈值
  解决办法:降低请求频率或者使用代理(IP代理)
  网页中设置一些陷阱(正常用户访问不到但是爬虫可以访问到)
  解决办法:分析网页,避开这些特殊陷阱
  请求间隔太短,返回相同的数据
  解决办法:增加请求间隔

  

<强> 3,js加密

  

反爬方式中较为难处理的一类。
  js加密的原理:服务器响应给浏览器的js文件,可以动态的生成一些加密参数,浏览器会根据js的计算得到这些参数,在请求中带入进来,如果请求中没有这些参数,那么服务器就任务请求无效。

  

 python常见的反爬虫策略

  

<强> 4字体加密

  

字体反爬,是一种常见的反爬技术,网站采用了自定义的字体文件,在浏览器上正常显示,但是爬虫抓取下来的数据要么就是乱码,要么就是变成其他字符。采用自定义字体文件是CSS3的新特性,熟悉前端的同学可能知道,就是字体属性。

  

 python常见的反爬虫策略

  

<强> 5,登录验证码

  

使用Python爬取网页内容时往往会遇到使用验证码登陆才能访问其网站,不同网站的使用的验证码也不同,在最开始使用简单验证码,识别数字,但是随着反爬的不断发展,慢慢设计出了更多复杂的验证码,比如:内容验证码,滑动验证码,图片拼接验证码等等。
  网上有很多打码平台,通过注册账号,调用平台接口,进行验证码的验证。

  

 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常见的反爬虫策略