python 常见的反爬虫策略


Posted in Python onSeptember 27, 2020

1、判断请求头来进行反爬

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

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

2、根据用户行为来进行反爬

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

3、js加密

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

python 常见的反爬虫策略

4、字体加密

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

python 常见的反爬虫策略

5、登录验证码

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

python 常见的反爬虫策略

6、md5相关知识

MD5,消息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。MD5的特点:
1.不可逆:不能从密文推导出明文。
2.不管明文长度为多少,密文的长度都固定。
3.密文之间不会重复。

import hashlib
print(hashlib.md5('python'.encode()).hexdigest())

字符串python加密后的结果:

23eeeb4347bdd26bfc6b7ee9a3b755dd

7、base64

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

import base64

#python中base64的加密
print(base64.b64encode('python'.encode()).decode())
#python中base64的解密
print(base64.b64decode('Y2hpbmE='.encode()).decode())

结果:

cHl0aG9u
china

二、验证码验证

自己动手看验证码(古诗词网)

import requests

url = "gushiwen.org"

session = requests.Session()

text = session.get(url).text

# 解析响应,找到验证码的图片地址,
# 下载验证码图片,保存
with open('code.jpg', 'wb')as f:
  f.write('验证码的url地址'.encode())

code = input('验证码是: ')

login_url = "login.com"

data = {
  "username": 'xx',
  "password": 'xx',
  "code": code
}
requests.post(url, data=data)

使用打码平台(图鉴)

新建一个captcha_api.py

import json
import requests
import base64
from io import BytesIO
from PIL import Image
from sys import version_info


def base64_api(uname, pwd, img):
  img = img.convert('RGB')
  buffered = BytesIO()
  img.save(buffered, format="JPEG")
  if version_info.major >= 3:
    b64 = str(base64.b64encode(buffered.getvalue()), encoding='utf-8')
  else:
    b64 = str(base64.b64encode(buffered.getvalue()))
  data = {"username": uname, "password": pwd, "image": b64}
  result = json.loads(requests.post("http://api.ttshitu.com/base64", json=data).text)
  if result['success']:
    return result["data"]["result"]
  else:
    return result["message"]
  return ""


def request_captcha(uname, pwd, img_path):
  img_path = img_path # 待验证的验证码路径
  img = Image.open(img_path)
  result = base64_api(uname, pwd, img)
  # 传入账号 密码 和图片
  print(result)

新建use_code.py,调用接口

img_path = '图片路径'

from captcha_api import request_captcha

ret = request_captcha("账号", "密码", img_path)

以上就是python 常见的反爬虫策略的详细内容,更多关于python反爬虫的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中的对象,方法,类,实例,函数用法分析
Jan 15 Python
Python的Django中django-userena组件的简单使用教程
May 30 Python
Python实现的基于优先等级分配糖果问题算法示例
Apr 25 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
python matlibplot绘制多条曲线图
Feb 19 Python
Python实现最常见加密方式详解
Jul 13 Python
对python中的*args与**kwgs的含义与作用详解
Aug 28 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
浅谈Django前端后端值传递问题
Jul 15 Python
python中np是做什么的
Jul 21 Python
PyTorch 中的傅里叶卷积实现示例
Dec 11 Python
python 5个实用的技巧
Sep 27 #Python
Python日志器使用方法及原理解析
Sep 27 #Python
python 爬取免费简历模板网站的示例
Sep 27 #Python
python如何提升爬虫效率
Sep 27 #Python
python操作链表的示例代码
Sep 27 #Python
python用tkinter实现一个简易能进行随机点名的界面
Sep 27 #Python
python实现暗通道去雾算法的示例
Sep 27 #Python
You might like
CodeIgniter多语言实现方法详解
2016/01/20 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
推荐下python/ironpython:从入门到精通
2007/10/02 Python
python下10个简单实例代码
2017/11/15 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
python读取Excel实例详解
2018/08/17 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
解决Atom安装Hydrogen无法运行python3的问题
2019/08/28 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
英语四级考试作弊检讨书
2014/09/29 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
2016年党员公开承诺书格式范文
2016/03/24 职场文书
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS
MySQL实现配置主从复制项目实践
2022/03/31 MySQL
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang