当前位置 博文首页 > Django利用Cookie实现反爬虫的例子

    Django利用Cookie实现反爬虫的例子

    作者:Erudite 时间:2021-06-19 18:45

    我们知道,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实现反爬虫有一定认识。

    js