上一节《【Django 022】中间件Middleware(一):Django中间件本质和处理流程详解》中,我们了解了中间件的本质和执行逻辑,这一节就来自己动手制作一个用来反爬虫的中间件。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。
爬虫
爬虫,就是一段伪装成浏览器,对网站发起请求获得网站资源的程序。例如爬取某求职网站的薪水统计,征婚交友网站的美女资料,或者某电子书网站的电子书等等。因为快速高效,爬虫可以帮助我们自动完成很多在线搜索统计的工作。
但是做为服务器,因为爬虫程序的频繁请求,可能造成负载过高,甚至宕机的后果。所以服务端运维通常会对自己的网站加入很多反爬机制。
爬虫与反爬一直是大家津津乐道的话题。今天咱们就来看看如何实现自己的一个反爬小程序,知己知彼,百战不殆。
反爬和频率控制
如果一个爬虫程序频繁对服务器进行请求,会对服务器性能造成极大冲击。所以如果发现某个用户或者某个ip访问极为频繁,基本可以判定其为爬虫,从而对其行为进行一些限制。
这里模仿前面《【Django 013】Django2.2会话技术之Session》中去创建登录页面和个人主页,结合《【Django 021】Django2.2利用装饰器和cache底层API两种方式实现Redis缓存原理和操作详解》对每个sessionid记录访问个人主页时间戳来达到限制用户频繁访问的目的。
正常登录逻辑
- 访问
login/
页面,如果session已经存在,跳转到homepage/
,否则进入登入页面。提交登陆表单后创建session并进入homepage/
,如果用户名为空则一直重定向回login/
- 如果session已经存在,直接访问
homepage/
可以成功,否则重定向到login/