Django利用Cookie实现反爬虫的例子
我们知道,Diango 接收的 HTTP 请求信息里带有 Cookie 信息。Cookie的作用是为了识别当前用户的身份,通过以下例子来说明Cookie的作用。例:
浏览器向服务器(Diango)发送请求,服务器做出响应之后,二者便会断开连接(会话结束),下次用户再来请求服务器,服务器没有办法识别此用户是谁,比如用户登录功能,如果没有 Cookie 机制支持,那么只能通过查询数据库实现,并且每次刷新页面都要重新操作一次用户登录才可以识别用户,这会给开发人员带来大量的冗余工作,简单的用户登录功能会给服务器带来巨大的负载压力。
Cookie 是从浏览器向服务器传递数据,让服务器能够识别当前用户,而服务器对 Cookie 的别机制是通过 Session 实现的,Session 存储了当前用户的基本信息,如姓名,年龄和性别等,由于Cookie 存储在浏览器里面,而且Cookie 的数据是由服务器提供的,如果服务器将用户信息直接保存在浏览器中,就很容易泄露用户信息,并且Cookie大小不能超过4KB,不能支持中文,因此要一种机制在服务器的某个域中存储用户数据,这个域就是Session。
总而言之,Cookie 和 Session 是为了解决HTTP协议无状态的弊端、为了让浏览器和服务端建立长久联系的会话而出现的。
Cookie除了解决 HTTP 协议无状态的弊端之外,还可以利用 Cookie 实现反爬虫机制。随着大数据和人工智能的发展,爬虫技术日益完善,网站为了保护自身数据的安全性和负载能力,都会在网站里设置反爬虫机制。
由于 Cookie 是通过 HTTP 协议从浏览器传递到服务器的,因此从视图函数的请求对象 request 可以获取 Cookie 对象,而Diango提供以下方法来操作Cookie对象:
# 获取 Cookie 与 Python 的字典读取方法一致 request。COOKIES['uuid'] request。COOKIES。get('uuid') # 在响应内容中添加 Cookie, 将 Cookie 返回给浏览器 return HttpResponse('Hello world') response。set_cookie('key', 'value') return response # 在响应内容中删除Cookie return HttpResponse('Hello world') response。delete_cookie('key') return response
操作 Cookie 对象无非就是对 Cookie 进行获取、添加和删除处理。添加Cookie 信息是使用 set_cookie 方法实现的,该方法是由响应类 HttpResponseBase 定义的
- key:设ECookie的key,类似字典的key。
- value:设 Cookie的value,类似字典的value。
- max age:设置Cookie的有效时间,以秒为单位。
- expires:设置Cookie的有效时间,以日期格式为单位。
- path:设置Cookie的生效路径,默认值为根目录(网站首页)
- domain:设置Cookie生效的域名。
- secure:设置传输方式,若为False,则使用HTTP,否则使用HTTPS。
- httponly:设置是否只能使用HTTP协议传输。
- samesite:设置强制模式,可选值为 lax 或 strict,主要防止CSRF攻击。
常见的反爬虫主要是设置参数max_age,expires 和 path。参数 max_age或 expires 用于设置 Cookie 的有效性,使爬程序无法长时间爬取网站数据;参数 path 用于将 Cookie 的生成过程隐藏起来,不容易让爬虫开发者找到并破解。
希望各位读者对Cookie实现反爬虫有一定认识。
到此这篇关于Django利用Cookie实现反爬虫的文章就介绍到这了,更多相关Django反爬虫内容请搜索hwidc以前的文章或继续浏览下面的相关文章希望大家以后多多支持hwidc!
【本文来自:http://www.yidunidc.com/kt.html 网络转载请说明出处】