用 AI 写 Python 脚本,导致服务器被反爬攻击
很多零基础用户喜欢让 AI 直接生成 Python 爬虫脚本,拿过来就往服务器上跑。
结果没几分钟,服务器 IP 就被目标网站封了——这就是典型的 用 AI 写 Python 脚本,导致服务器被反爬攻击。
本文以真实运维场景为例,讲清楚怎么排查、怎么改代码、怎么预防,每一步都能直接照着做。
为什么 AI 写的爬虫脚本容易触发反爬?
AI 生成的爬虫通常只包含最基础的 requests.get(url),没有 User-Agent、没有 Referer、没有请求间隔。
目标网站的防火墙会立刻识别出异常流量(比如每秒几百次请求、HTTP 特征像爬虫),直接返回 403 或 429 状态码,甚至把服务器 IP 加入黑名单。
这类问题在初学者项目中占比很高。
第一步:确认服务器是否真的被反爬
登录服务器,先看 Web 访问日志(以 Nginx 为例):
cd /var/log/nginx
tail -100 access.log | grep -E ' 403 | 429 '
如果发现大量 403 或 429 响应,且来源 IP 统一(就是你服务器的公网 IP),基本可以断定被反爬了。
也可以直接手动模拟请求:
curl -I http://目标网址
返回 403 Forbidden 或 429 Too Many Requests 即可确认。
第二步:让 AI 重写带反爬对抗的脚本
不要只用默认 requests。
跟 AI 说清楚要求:添加随机 User-Agent、设置 Referer、加入随机延迟、使用代理 IP。
以下是关键配置片段:
import requests
import time
import random
headers = {
'User-Agent': random.choice([
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15'
]),
'Referer': 'https://www.google.com/'
}
proxies = {'http': 'http://你的代理:端口', 'https': 'http://你的代理:端口'}
for url in urls:
try:
resp = requests.get(url, headers=headers, proxies=proxies, timeout=10)
# 处理数据
time.sleep(random.uniform(3, 8)) # 请求间隔 3~8 秒
except Exception as e:
print(f'请求失败: {e}')
注意:代理 IP 建议购买付费稳定的服务(比如快代理、芝麻代理),免费代理存活率低,容易失效。
第三步:在服务器层面限制请求频率(双重保险)
如果你用宝塔面板,可以在 Nginx 设置中添加限流规则,避免单个脚本跑得太猛:
- 进入宝塔面板 → 网站 → 选择站点 → 设置 → 配置文件
- 在
server块内添加:
limit_req_zone $binary_remote_addr zone=爬虫限流:10m rate=1r/s;
location / {
limit_req zone=爬虫限流 burst=3 nodelay;
# 其他配置
}
这样每秒最多处理 1 个请求,突然爆发也只允许 3 个排队,超出的返回 503。
能有效防止脚本失控继续被反爬。
高频问题与避坑指南
Q:使用了代理还是被封? 代理质量不好,或被目标网站检测到数据中心 IP。尝试改用住宅代理或动态 IP 轮换。
Q:如何处理验证码? 先判断是不是频率过高导致的验证码,降低频率后再测试。如果必须处理,使用第三方打码平台(如打码兔、超级鹰),不要自己训练模型。
Q:脚本跑了一会儿就不动了? 检查是否被目标网站断连,加上异常重试机制(最多重试 3 次,间隔 10 秒)。
避坑提醒:千万不要在开发环境外直接跑 AI 生成的超长循环请求。先在单机上用小量 URL 测试,确认不会触发反爬再上服务器。
效果验证
修改脚本并部署后,再次执行:
# 在服务器上运行修改后的爬虫脚本
python3 crawler.py
# 同时另开窗口观察日志
watch -n 2 "tail -20 /var/log/nginx/access.log | grep -E ' 200 | 403 | 429 '"
如果持续返回 200,且没有大量 403/429,说明反爬已被规避。
再运行 10 分钟没有封 IP,基本就安全了。
如果你正在处理 用 AI 写 Python 脚本,导致服务器被反爬攻击 的问题,建议先按本文步骤完整执行,再根据自己的环境微调;
遇到异常时优先回看避坑和高频问题部分。
掌握这些方法后,你也能让 AI 生成的代码更可靠,不再让服务器背锅。