用 AI 写 Python 爬虫,导致服务器被反爬封禁
不少新手用 AI 写 Python 爬虫时,跑了几分钟就发现服务器 IP 被目标网站封了。
这其实不是 AI 的问题,而是生成的代码太“裸”——没有考虑反爬机制。
下面从运维视角拆解原因,并给出可落地的排查和修复步骤。
为什么 AI 写的爬虫容易触发封禁
AI 生成的爬虫代码通常只关注抓取逻辑,默认不使用浏览器头、不控制频率、不设代理。
目标网站的反爬系统检测到连续相同的 User-Agent、高频访问、无 referer 等特征,就会直接封掉你的服务器 IP。
这在用免费 ChatGPT 或国内大模型写代码时特别常见。
第一步:检查 User-Agent 是否被识别
AI 写的代码往往直接用 requests 默认的 UA(如 python-requests/2.x),一看就是爬虫。
你需要手动设置一个常用浏览器的 UA。
打开你的爬虫文件,找到 headers 部分,修改成像下面这样:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Referer': 'https://www.example.com/',
}
如果用的是 AI 生成的代码,记得在请求前加上上面这组头部,并定期更换 UA 池。
第二步:降低请求频率并加随机延时
AI 经常生成不带 time.sleep 的循环,每秒几十次请求,任何正常网站都会封你。
最简单的修复是在每次请求后加随机等待:
import time
import random
# 每次请求后随机休息 1~3 秒
time.sleep(random.uniform(1, 3))
如果你在服务器上通过宝塔面板运维,还可以在 Nginx 防火墙(如 ngx_http_limit_req_module)里限制单个 IP 的请求速率来保护自己的站点;
但作为爬虫方,你应当主动放慢脚本。
第三步:使用代理 IP 并定期更换
如果目标网站对单一 IP 有严格限制,即使降低频率也可能被封。
这时需要拨号代理或付费代理池。
在代码中集成代理示例:
proxies = {
'http': 'http://user:pass@proxy_ip:port',
'https': 'http://user:pass@proxy_ip:port',
}
requests.get(url, headers=headers, proxies=proxies, timeout=10)
如果是阿里云或腾讯云服务器,可以考虑使用弹性公网 IP 切换,但更省心的做法是用专门的代理服务商。
避坑指南与效果验证
每次修改后,不要直接对目标站跑大量请求。
先用一个测试 URL 或本站做个压力测试,观察是否返回 403、429 或自定义封禁页面。
可以在服务器端用 curl -I 模拟请求查看响应头:
curl -I -A 'Mozilla/5.0 ...' https://target.com
如果返回 200 且页面内容正常,再逐步扩大抓取量。
另外,AI 生成的代码常忽略异常处理,加一个 try-except 捕获 requests.exceptions.RequestException,避免一个请求失败导致脚本崩溃。
如果你正在处理用 AI 写 Python 爬虫导致服务器被反爬封禁的问题,建议先按上述三步逐一排查,再根据实际环境微调 UA 和延时;
遇到封禁时优先回看请求头和频率设置。
记住,AI 只是助手,爬虫的稳健性还得靠人工调教。