看我如何用定值 Cookie 实现反爬
摘要:本次案例,用定值Cookie实现反爬。
本文分享自华为云社区《我是怎么用一个特殊Cookie,限制住别人的爬虫的》,作者: 梦想橡皮擦 。
Cookie 生成
由于本案例需要用到一个特定的 Cookie ,所以我们需要提前将其生成,你可以直接设置一个固定的字符串,也可以使用 Python 加密模块来加密一段文本,例如本案例加密 梦想橡皮擦。
下面是一个示例代码,展示了如何使用 Python 的 hashlib 模块进行加密:
import hashlib
# 要加密的文本
text = "梦想橡皮擦"
# 使用 sha256 算法进行加密
encrypted_text = hashlib.sha256(text.encode()).hexdigest()
print(encrypted_text)
在这个例子中,我们使用了 hashlib 模块中的 sha256 算法对文本进行加密。这个算法生成了一个长度为 64 位的十六进制哈希值,用于表示加密后的文本。
注意,这个算法只能用于加密文本,而不能用于解密。因此,一旦文本被加密,就无法恢复成原来的文本,即不可逆加密/单项加密。
Python Flask 框架生成 Cookie
在 Python 的 Flask 框架中,可以使用 make_response 函数和 set_cookie 方法来生成一个 Cookie。
例如,下面的代码片段展示了如何在 Flask 中设置一个名为 story 的 Cookie,并将它的值设为前文建立的加密串。
from flask import Flask, make_response
app = Flask(__name__)
@app.route('/')
def index():
resp = make_response('Setting a cookie')
encrypted_text = hashlib.sha256(text.encode()).hexdigest()
resp.set_cookie('story', encrypted_text)
return resp
在这个例子中,我们使用 make_response() 函数创建了一个响应对象,然后使用 set_cookie() 方法来设置 cookie。最后,我们将响应对象返回给客户端。
注意,上面的代码仅创建了一个简单的 Cookie,它只有名称和值两个部分。你还可以使用其他可选参数来设置 Cookie 的其他属性,例如过期时间、域名等。
接下来为大家在补充一下 make_response() 相关知识。
Flask make_response 加载模板
在 Flask 中,你可以使用 make_response() 函数和模板系统来生成带有模板的响应。
下面是一个示例代码,展示了如何使用 make_response() 函数加载模板:
from flask import Flask, make_response, render_template
app = Flask(__name__)
@app.route('/')
def index():
# 加载模板并渲染
rendered_template = render_template('index.html', title='梦想橡皮擦')
# 使用 make_response 函数创建响应
resp = make_response(rendered_template)
return resp
在这个例子中,我们首先使用 Flask 的 render_template() 函数加载并渲染了名为 index.html 的模板。然后我们使用 make_response() 函数创建了一个响应对象,并将渲染后的模板作为响应的内容。最后,我们返回了这个响应对象给客户端。
注意,你需要在 Flask 应用的模板目录中存在名为 index.html 的模板文件,才能正常使用上述代码。
然后我们将该视图函数补充完整,代码在 app/routes.py 文件中。
@app.route('/')
@app.route('/index')
def index():
item = {
"msg": "后台传递信息"
}
# 访问首页生成一个 Cookie 值,该值用于访问特定页面
rendered_template = render_template('index.html', title='梦想橡皮擦')
resp = make_response(rendered_template)
text = "梦想橡皮擦"
# 使用 sha256 算法进行加密
encrypted_text = hashlib.sha256(text.encode()).hexdigest()
resp.set_cookie('story', encrypted_text)
return resp
此时当我们访问爬虫训练场首页的时候,就会在 Cookie 中写入一个加密之后的字符串。
通过开发者工具,可以查看到响应头。

最后一步,就是在 Python Flask 框架中判断刚刚的 Cookie 值,如果存在则响应数据,否则返回 403。
Flask 判断指定 cookie 是否存在
在 Python 的 Flask 框架中,你可以使用 request.cookies 属性来判断指定的 Cookie 是否存在。
例如,下面的代码片段展示了如何判断一个名为 story 的 Cookie 是否存在:
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def index():
if 'story' in request.cookies:
# 如果存在 'story' cookie,则执行相应操作
# ...
else:
# 如果不存在 'story' cookie,则执行相应操作
# ...
将代码补充完整,文件是 app/antispider/index.py。
@antispider.route('/cookie_demo')
def cookie_demo():
if 'story' in request.cookies:
# 如果存在 'story' cookie,则执行相应操作
# ...
return render_template("antispider/cookie_demo.html")
else:
return "没有权限", 403
补充知识点
在 Python 的 Flask 框架中,除了使用 set_cookie() 方法设置 cookie 以外,还有其他几种操作 cookie 的方法。
下面是一些常用的操作 cookie 的方法:
- 设置 cookie 的值:你可以使用 set_cookie() 方法来设置 cookie 的值。例如:
from flask import Flask, make_response
app = Flask(__name__)
@app.route('/')
def index():
resp = make_response('Setting a cookie')
resp.set_cookie('user', 'xiangpica')
return resp
- 获取 cookie 的值:你可以使用 request.cookies字典来获取 cookie 的值。例如:
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def index():
user = request.cookies.get('user')
return user
- 删除 cookie:你可以使用 set_cookie() 方法并将 cookie 的过期时间设为过去的时间来删除 cookie。例如:
from flask import Flask, make_response
app = Flask(__name__)
@app.route('/')
def index():
resp = make_response('Deleting a cookie')
resp.set_cookie('user', '', expires=0)
return resp
看我如何用定值 Cookie 实现反爬的更多相关文章
- python爬虫--cookie反爬处理
Cookies的处理 作用 保存客户端的相关状态 在爬虫中如果遇到了cookie的反爬如何处理? 手动处理 在抓包工具中捕获cookie,将其封装在headers中 应用场景:cookie没有有效时长 ...
- 12306抢票带来的启示:看我如何用Go实现百万QPS的秒杀系统
本文为开源实验性工程:“github.com/GuoZhaoran/spikeSystem”的配套文章,原作者:“绘你一世倾城”,现为:猎豹移动php开发工程师,感谢原作者的技术分享. 1.引言 Go ...
- 常见的反爬措施:UA反爬和Cookie反爬
摘要:为了屏蔽这些垃圾流量,或者为了降低自己服务器压力,避免被爬虫程序影响到正常人类的使用,开发者会研究各种各样的手段,去反爬虫. 本文分享自华为云社区<Python爬虫反爬,你应该从这篇博客开 ...
- 第三百四十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—cookie禁用、自动限速、自定义spider的settings,对抗反爬机制
第三百四十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—cookie禁用.自动限速.自定义spider的settings,对抗反爬机制 cookie禁用 就是在Scrapy的配置文件set ...
- 运用cookie登陆人人网爬取数据
浏览器访问WEB服务器的过程 在用户访问网页时,不论是通过URL输入域名或IP,还是点击链接,浏览器向WEB服务器发出了一个HTTP请求(Http Request),WEB服务器接收到客户端浏览器的请 ...
- 【Python3爬虫】大众点评爬虫(破解CSS反爬)
本次爬虫的爬取目标是大众点评上的一些店铺的店铺名称.推荐菜和评分信息. 一.页面分析 进入大众点评,然后选择美食(http://www.dianping.com/wuhan/ch10),可以看到一页有 ...
- python高级—— 从趟过的坑中聊聊爬虫、反爬以及、反反爬,附送一套高级爬虫试题
前言: 时隔数月,我终于又更新博客了,然而,在这期间的粉丝数也就跟着我停更博客而涨停了,唉 是的,我改了博客名,不知道为什么要改,就感觉现在这个名字看起来要洋气一点. 那么最近到底咋不更新博客了呢?说 ...
- python爬虫--爬虫与反爬
爬虫与反爬 爬虫:自动获取网站数据的程序,关键是批量的获取. 反爬虫:使用技术手段防止爬虫程序的方法 误伤:反爬技术将普通用户识别为爬虫,从而限制其访问,如果误伤过高,反爬效果再好也不能使用(例如封i ...
- Python爬虫反反爬:CSS反爬加密彻底破解!
刚开始搞爬虫的时候听到有人说爬虫是一场攻坚战,听的时候也没感觉到特别,但是经过了一段时间的练习之后,深以为然,每个网站不一样,每次爬取都是重新开始,所以,爬之前谁都不敢说会有什么结果. 前两天,应几个 ...
- python3爬虫系列19之反爬随机 User-Agent 和 ip代理池的使用
站长资讯平台:python3爬虫系列19之随机User-Agent 和ip代理池的使用我们前面几篇讲了爬虫增速多进程,进程池的用法之类的,爬虫速度加快呢,也会带来一些坏事. 1. 前言比如随着我们爬虫 ...
随机推荐
- 基于uniapp框架开发飞书小程序总结
前期准备 飞书官方客户端文档:https://open.feishu.cn/document/home/intro 飞书官方工具资源文档:https://open.feishu.cn/document ...
- kali 下安装tplmap
kali 下安装tplmap 1. 安装kali下的python2的pip工具 kali2020版及以上, 输入python2命令会执行python2, python3也存在. 但pip默认是pip3 ...
- centos7(虚拟机)下安装nginx
centos7(虚拟机)下安装nginx 安装前准备 gcc yum install gcc-c++ pcre yum install -y pcre pcre-devel zlib yum inst ...
- echarts 图表 tooltip提示框,formatter自定义
自定义图表提示框样式, 自定义原因:series中有多个数据样式,那么提示框会展示多条. tooltip: { formatter(params) { let circle = `<span s ...
- 接口返回JSON字符串压缩和解压
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.IO;usi ...
- mybatis插入批量数据
1 for循环重复调用dao,消耗大 2 sql语句编写插入多条,只用于少数 3 mybatis的batch插入 @Test public void testInsertBatch2() ...
- 20193314 白晨阳 实验三 Socket编程技术
学号 2019-2020-2 <Python程序设计>实验三报告 课程:<Python程序设计> 班级: 201933 姓名: 白晨阳 学号: 20193314 实验教师:王志 ...
- 虚拟机文件丢失,虚拟机无法启动,通过xx-flat.vmdk和xx-delta.vmdk恢复虚拟机
突然掉电,导致虚拟机文件夹里面的文件丢失,只剩余-flat.vmdk和-delta.vmdk文件,其他文件全部丢失,文件格式原本为"文件"格式.新建虚拟机无法直接使用此文件夹里面的 ...
- scrcpy投屏软件
Android很好用得scrcpy 投屏软件: 下载传送门:https://github.com/Genymobile/scrcpy/releases 1.下载解压包后,解压至自己得电脑目录,并复制目 ...
- Tcp网络模型
要摸清网络,那么第一步肯定是要清楚网络协议的分层结构,用上帝视角来看网络. 对于同一台设备上的进程间通信,有很多种方式,比如有管道.消息队列.共享内存.信号等方式,而对于不同设备上的进程间通信,就需要 ...