Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦想橡皮擦
爬虫训练场
提交
53e60ab9
爬
爬虫训练场
项目概览
梦想橡皮擦
/
爬虫训练场
通知
64
Star
7
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
爬
爬虫训练场
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
53e60ab9
编写于
12月 31, 2022
作者:
梦想橡皮擦
💬
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Cookie 反爬
上级
808e14e7
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
70 addition
and
12 deletion
+70
-12
app/__pycache__/routes.cpython-36.pyc
app/__pycache__/routes.cpython-36.pyc
+0
-0
app/antispider/__pycache__/index.cpython-36.pyc
app/antispider/__pycache__/index.cpython-36.pyc
+0
-0
app/antispider/index.py
app/antispider/index.py
+11
-1
app/routes.py
app/routes.py
+11
-2
app/templates/antispider/cookie_demo.html
app/templates/antispider/cookie_demo.html
+17
-0
app/templates/common/header.html
app/templates/common/header.html
+1
-1
app/templates/index.html
app/templates/index.html
+30
-8
未找到文件。
app/__pycache__/routes.cpython-36.pyc
浏览文件 @
53e60ab9
无法预览此类型文件
app/antispider/__pycache__/index.cpython-36.pyc
浏览文件 @
53e60ab9
无法预览此类型文件
app/antispider/index.py
浏览文件 @
53e60ab9
...
@@ -12,7 +12,7 @@ def before_request():
...
@@ -12,7 +12,7 @@ def before_request():
# 允许请求通过
# 允许请求通过
return
None
return
None
else
:
else
:
return
"错误请求"
,
403
return
"错误请求"
,
403
@
antispider
.
route
(
'/show'
)
@
antispider
.
route
(
'/show'
)
...
@@ -23,3 +23,13 @@ def index():
...
@@ -23,3 +23,13 @@ def index():
@
antispider
.
route
(
'/error403'
)
@
antispider
.
route
(
'/error403'
)
def
error403
():
def
error403
():
return
"缺少关键参数"
,
403
return
"缺少关键参数"
,
403
@
antispider
.
route
(
'/cookie_demo'
)
def
cookie_demo
():
if
'story'
in
request
.
cookies
:
# 如果存在 'story' cookie,则执行相应操作
# ...
return
render_template
(
"antispider/cookie_demo.html"
)
else
:
return
"没有权限"
,
403
app/routes.py
浏览文件 @
53e60ab9
from
flask
import
render_template
from
flask
import
render_template
,
make_response
from
app
import
app
from
app
import
app
import
hashlib
"""
"""
首页相关路由配置
首页相关路由配置
...
@@ -11,7 +12,15 @@ def index():
...
@@ -11,7 +12,15 @@ def index():
item
=
{
item
=
{
"msg"
:
"后台传递信息"
"msg"
:
"后台传递信息"
}
}
return
render_template
(
'index.html'
,
title
=
"梦想橡皮擦"
,
item
=
item
)
# 访问首页生成一个 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
@
app
.
route
(
'/bt'
)
@
app
.
route
(
'/bt'
)
...
...
app/templates/antispider/cookie_demo.html
0 → 100644
浏览文件 @
53e60ab9
{% extends "base.html" %}
{% block content %}
<div
class=
"container text-center mt-3"
><h2>
这是一个关于边界的故事。
</h2>
<p>
边界是一个古老的城镇,位于一座山谷之中。它是一个安静而美丽的地方,居民们都很友好,生活在和谐中。
</p>
<p>
然而,这种平静并不能持久。有一天,一群强盗来到了边界,他们想抢劫和掠夺城镇里的财物。
</p>
<p>
城镇的居民们很害怕,他们不知道该怎么办。但是,有一个年轻的男孩,他叫纳特尔。纳特尔是一个勇敢和有见识的人,他决定与强盗作斗争。
</p>
<p>
纳特尔开始计划如何抵抗强盗。他和其他年轻人一起练习武术,并且招募了一些勇敢的城镇居民来加入他的团队。
</p>
<p>
当强盗来到城镇的时候,纳特尔和他的团队准备迎战。他们用他们所学的武术技巧和勇气抵抗强盗,最终成功击退了他们。
</p>
<p>
边界的居民们感到非常感激,他们决定把纳特尔当作他们的英雄。从此以后,纳特尔成为了边界的领导者,带领着城镇的居民度过了许多平静的日子。
</p>
<p>
边界再也没有遇到过强盗的威胁,因为纳特尔和他的团队
</p>
<p>
继续保护着城镇。他们成为了边界最强大的保护者,并且为了维护和平,他们还和周围的城镇建立了联盟,共同应对任何威胁。
</p>
<p>
纳特尔也成为了一个很受尊敬的领导者,因为他不仅是一个勇敢的战士,还是一个关心和爱护城镇居民的人。他每天都会和居民们交流,了解他们的需求,并且致力于改善他们的生活。
</p>
<p>
边界成为了一个幸福而和平的地方,所有的居民都感到自豪和幸福。他们知道,有纳特尔在,他们就不用担心任何威胁。
</p>
<p>
这就是纳特尔如何成为边界的英雄,带领着城镇度过了许多幸福的日子。他将永远被边界的居民所铭记。
</p>
</div>
{% endblock %}
\ No newline at end of file
app/templates/common/header.html
浏览文件 @
53e60ab9
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1"
>
<link
rel=
"shortcut icon"
href=
"{{url_for('static',filename='images/favicon.ico')}}"
type=
"image/x-icon"
/>
<link
rel=
"shortcut icon"
href=
"{{url_for('static',filename='images/favicon.ico')}}"
type=
"image/x-icon"
/>
{% if title%}
{% if title%}
<title>
{{title}} | 爬虫训练场
,让天下没有失效的爬虫
</title>
<title>
爬虫训练场 | {{title}}
,让天下没有失效的爬虫
</title>
{% else %}
{% else %}
<title>
爬虫训练场,让天下没有失效的爬虫
</title>
<title>
爬虫训练场,让天下没有失效的爬虫
</title>
{%endif%}
{%endif%}
...
...
app/templates/index.html
浏览文件 @
53e60ab9
{% extends "base.html" %}
{% extends "base.html" %}
{% block content %}
{% block content %}
<div
class=
"alert alert-danger alert-dismissible text-center"
>
<div
class=
"alert alert-danger alert-dismissible text-center"
>
<button
type=
"button"
class=
"btn-close"
data-bs-dismiss=
"alert"
></button>
<button
type=
"button"
class=
"btn-close"
data-bs-dismiss=
"alert"
></button>
<strong>
爬虫训练场项目
</strong>
正在建设中~
<strong>
爬虫训练场项目
</strong>
正在建设中~
</div>
</div>
<div
class=
"container pt-5"
>
<div
class=
"container pt-5"
>
<h3
class=
"text-success"
>
普通爬虫
</h3>
<h3
class=
"text-success"
>
普通爬虫
</h3>
...
@@ -34,9 +34,7 @@
...
@@ -34,9 +34,7 @@
<div
class=
"card border-info rounded-5 shadow-sm"
style=
"min-height:268px;min-width:300px;"
>
<div
class=
"card border-info rounded-5 shadow-sm"
style=
"min-height:268px;min-width:300px;"
>
<div
class=
"card-header text-center"
>
<div
class=
"card-header text-center"
>
<h4
class=
"card-title"
>
分页爬虫
</h4>
<h4
class=
"card-title"
>
分页爬虫
</h4>
<div
class=
"bg-danger text-white rounded p-1"
style=
"transform: rotate(20deg); position:absolute;right:0;top:0.5rem;"
>
最新更新
</div>
</div>
</div>
<div
class=
"card-body"
>
<div
class=
"card-body"
>
<p
class=
"card-text"
>
本案例是由 2760 条数据组成的分页爬虫,数据为国内学校清单,主要用于练习分页数据采集。
</p>
<p
class=
"card-text"
>
本案例是由 2760 条数据组成的分页爬虫,数据为国内学校清单,主要用于练习分页数据采集。
</p>
...
@@ -103,10 +101,13 @@
...
@@ -103,10 +101,13 @@
<h3
class=
"text-danger"
>
PC端反爬
</h3>
<h3
class=
"text-danger"
>
PC端反爬
</h3>
<hr>
<hr>
<div
class=
"row align-items-stretch"
>
<div
class=
"row align-items-stretch"
>
<div
class=
"col mt-2"
>
<div
class=
"col mt-2"
>
<div
class=
"card border-danger rounded-5 shadow-sm"
style=
"min-height:268px;min-width:300px;"
>
<div
class=
"card border-danger rounded-5 shadow-sm"
style=
"min-height:268px;min-width:300px;"
>
<div
class=
"card-header text-center"
>
<div
class=
"card-header text-center"
>
<h4
class=
"card-title"
>
UA 参数反爬
</h4>
<h4
class=
"card-title"
>
UA 参数反爬
</h4>
<div
class=
"bg-danger text-white rounded p-1"
style=
"transform: rotate(20deg); position:absolute;right:0;top:0.5rem;"
>
最新更新
</div>
</div>
</div>
<div
class=
"card-body"
>
<div
class=
"card-body"
>
<p
class=
"card-text"
>
该案例要求爬虫程序构造请求头的时候,必须携带 User-Agent 参数,否则会返回403错误。
</p>
<p
class=
"card-text"
>
该案例要求爬虫程序构造请求头的时候,必须携带 User-Agent 参数,否则会返回403错误。
</p>
...
@@ -123,11 +124,32 @@
...
@@ -123,11 +124,32 @@
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"col mt-2"
>
<div
class=
"card border-danger rounded-5 shadow-sm"
style=
"min-height:268px;min-width:300px;"
>
<div
class=
"card-header text-center"
>
<h4
class=
"card-title"
>
定值 Cookie 反爬
</h4>
<div
class=
"bg-danger text-white rounded p-1"
style=
"transform: rotate(20deg); position:absolute;right:0;top:0.5rem;"
>
最新更新
</div>
</div>
<div
class=
"card-body"
>
<p
class=
"card-text"
>
该案例要求爬虫程序的请求头携带固定Cookie值,如果缺少无法访问。
</p>
<p
class=
"card-text text-left"
>
难度:⭐
</p>
<p
class=
"card-text"
>
案例:
<a
href=
"/as/cookie_demo"
class=
"card-link text-success"
>
边界故事
</a>
</p>
</div>
<div
class=
"card-footer text-end"
>
</div
>
<a
href=
"#"
class=
"btn btn-primary card-link "
>
学习博客
</a
>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% endblock %}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录