flask服务端页面预防被爬措施

我发现自己网站有些页面不适合被爬虫记录(比如一篇文章的浏览量,应该记录真人访问的,结果浏览量全是机器人带来的),因此可以采取一些防爬措施,毕竟有些内容不是访问越多越好的

一.robots.txt

复制代码
User-agent: *
Disallow:/private/
Disallow:/api/user/

但我不推荐robots.txt,一是会暴露敏感路径,二是太麻烦,后续多个页面不好逐一添加.

二.UA判断

python 复制代码
BAD_UA_KEYWORDS=[
    'bot', 'spider', 'crawl', 'slurp', 'baidu', 'yandex', 'sogou',
    'bingpreview', 'facebookexternalhit', 'python-requests',
    'curl', 'wget', 'httpclient', 'scrapy', 'headless', 'phantom',
    'selenium', 'puppeteer', 'playwright', 'go-http-client',
    'java/', 'okhttp', 'axios', 'libwww', 'lwp-', 'masscan', 'nmap']

def isLikelyBot():
    ua=request.headers.get('User-Agent','').lower()
    if not ua:#如果没有ua
        return True
    for kw in BAD_UA_KEYWORDS:#如果有ua黑名单
        if kw in ua:
            return True

正常的浏览器都会有UA,这一条可以拦住大部分低级爬虫,为了保险可以加上后面两条:

python 复制代码
    if not request.headers.get('Accept-Language'):
        return True
    if request.headers.get('Accept')=='*/*':
        return True

三.限流

安装:

python 复制代码
pip install Flask-Limiter

在服务端里添加:

python 复制代码
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

limiter=Limiter(app=app,key_func=get_remote_address,default_limits=["200 per day","50 per hour","15 per minute"],
    storage_uri="memory://",)#限制访问流量

第二第三条亲测比较好用,对于我这种低访问量的网站来说能拦住大部分爬虫

四.去重

python 复制代码
import time
_seen = {}

def is_first_view(article_id, window=1800):
    ip = request.remote_addr or '0.0.0.0'
    key = (article_id, ip)
    now = time.time()
    last = _seen.get(key)
    if last and now - last < window:
        return False
    _seen[key] = now
    if len(_seen) > 20000:#防内存无限涨
        for k in [k for k, v in _seen.items() if now - v > window]:
            _seen.pop(k, None)
    return True

如果短时间一直访问,浏览量只会加一

文章链接:flask服务端页面预防被爬措施

相关推荐
小小张说故事12 分钟前
Python 里 copy.copy() 和 deepcopy() 到底差在哪:拆开 __copy__、__deepcopy__ 和那个防止无限递归的 memo 字典
python
vipxieliang13 分钟前
Python collections:高效容器与实战案例
后端·python
驭渊的小故事27 分钟前
Spring AOP 核心概念与通知类型详解
java·后端·spring
vipxieliang28 分钟前
ValidX vs 手写验证代码:开发效率对比实测
java·spring boot·后端
青少儿编程课堂28 分钟前
蓝桥杯青少组图形化 STEMA 省考(报名倒计时·11/22开考)+ 全国青少年信息素养大赛 2026—2027赛季 + 电子学会图形化考级:校园华容道大闯关
c++·python·算法·bfs·信息学竞赛
特创数字科技37 分钟前
写了个 Windows 下载器:一键拉 GitHub / Gitee 源码,带 SHA256 校验
python·github
vipxieliang39 分钟前
Go GC 性能优化实践:从 GOGC、GOMEMLIMIT 到分配优化
后端·go
海豚调度1 小时前
Apache DolphinScheduler 2026 年 10 月社区贡献总结报告
后端
vipxieliang1 小时前
ThinkORM 3.0 入门:强类型模型定义与查询构造器
后端·php·thinkphp