用 AI 写 Python 爬虫

AI帮你写爬虫却被反爬盯上?从服务器端破解反爬的实操方法

很多朋友用 AI(比如 ChatGPT)快速生成了一段 Python 爬虫代码,一运行就被目标网站封了 IP 或弹出验证码。
这不是代码写错了,而是触发了服务器的反爬虫机制。作为服务器运维博主,我习惯从“怎么让爬虫看起来更像正常人”的角度解决问题。
下面我会从准备环境开始,一步一步带你在自己的服务器上配置出能绕过常规反爬的爬虫。

准备工作:你需要一台服务器和基础环境

  • 一台云服务器(推荐 2 核 2G 以上,系统用 CentOS 7 或 Ubuntu 20.04)
  • 已安装宝塔面板(方便快速管理环境,也支持手动装 Python)
  • Python 3.8+ 和 pip(宝塔自带 Python 项目管理器,也可以直接 yum install python3 -y
  • 一个用于测试爬虫的目标网站(建议先用公开 API 或静态页面试)

小提示:如果还没装宝塔,去 bt.cn 复制安装命令一键安装即可。
爬虫项目可以放在 /www/wwwroot/spider 目录,方便管理。

第一步:让 AI 生成的代码“穿上衣服”——修改请求头

AI 写的爬虫往往只带默认的 User-Agent,比如 python-requests/2.28.0,服务器一看就知道是爬虫。
你需要在代码里伪装成普通浏览器。

import requests
from fake_useragent import UserAgent

ua = UserAgent()
headers = {
    'User-Agent': ua.random,
    'Referer': 'https://www.baidu.com/',
    'Accept-Language': 'zh-CN,zh;q=0.9'
}
response = requests.get('你的目标网址', headers=headers, timeout=10)

如果你用的宝塔面板,可以把这段代码放到 /www/wwwroot/spider/ 下的 .py 文件里,用宝塔的“Python 项目管理器”添加项目,选择 Python 版本和入口文件,然后启动。
效果是每次请求的浏览器标识都不同。

第二步:用代理 IP 池绕开 IP 封禁

即使改了请求头,同一个 IP 频繁请求仍然会被 ban。
解决方法是用代理,每次请求换一个 IP。
这里推荐免费代理池方案(仅供学习,正式项目请用付费稳定代理)。

  1. 安装代理切换库 pip install requests random(随机选择)
  2. 准备一个代理列表,或者通过免费 API 获取动态代理。
  3. 在代码中每次请求时随机选择一个代理。
proxies = {
    'http': 'http://代理IP:端口',
    'https': 'http://代理IP:端口'
}
response = requests.get(url, headers=headers, proxies=proxies, timeout=10)

重要:免费代理速度慢且不稳定,建议在宝塔面板中设置定时任务(每分钟清理无效代理),或者直接使用云服务器的弹性公网 IP 切换功能(比如阿里云弹性公网IP切换)。

第三步:添加随机延时,模拟人类操作

连续快速请求也是被反爬的主要原因。
在每次请求之间加入随机暂停。

import time
import random

time.sleep(random.uniform(1, 3))  # 随机等待1-3秒

如果爬虫需爬取大量页面,建议配合请求重试机制(比如 requests.adapters.HTTPAdapter 设置重试次数)。

避坑指南:最容易踩的 3 个坑

  1. 代理未验证可用性:免费代理经常失效,请求前最好先测试一下代理是否可用,否则会报 ConnectionError。可以在代码里加 try/except 并更换下一个代理。
  2. 忘记处理 Cookie:有些网站需要维持会话,比如登录态。你需要在 AI 生成的代码里检查是否需要 cookies 参数或 session 对象。建议统一用 requests.Session()
  3. 爬取频率依然太高:即使设置了随机延时,如果目标网站有严格的频率限制(比如 1 秒 1 次),你仍然会被封。这时要把延时范围设大(比如 3-6 秒),或者用爬虫框架自带的限速功能(如 Scrapy 的 DOWNLOAD_DELAY)。

效果验证:如何确认反爬已被绕过

  1. 状态码:正常返回 200,而不是 403、503 或 429。
  2. 响应内容:检查 response.text 里是否包含验证码页面、空页面或错误提示。
  3. 连续运行 10 分钟以上,观察 IP 是否被拉黑(可通过 ssh 登录服务器,用 curl -I 目标网址 查看返回头)。

你也可以在宝塔面板的“计划任务”里每分钟执行一次爬虫测试脚本,并日志记录状态码和耗时,方便排查。

高频问题解答

Q:用了代理和延时,还是被封怎么办?
A:检查代理来源是否太单一(多个 IP 但属于同一 C 段),或者目标网站有更高级的反爬(比如检测浏览器指纹)。这时可以尝试改用 Selenium 模拟真实浏览器,在服务器上安装 headless Chrome 并启动。

Q:AI 生成的代码中有很多冗余或错误,怎么快速修正?
A:让 AI 自行审查代码,或直接告诉 AI“帮我添加代理支持、随机 User-Agent 和延时”。如果报错,把报错信息复制给 AI,一般能直接给出修复方案。

Q:在宝塔面板里运行爬虫需要注意什么?
A:宝塔默认 Python 环境可能缺少某些库,需要手动 pip install。推荐用“Python 项目管理器”创建虚拟环境,避免依赖冲突。还有,不要在面板后台直接运行死循环爬虫,建议写成定时任务来控制运行时长。

如果你正在处理用 AI 写 Python 爬虫却被反爬盯上的情况,建议先从修改请求头和加延时开始,再逐步加入代理。
每一步改动后都用上面的方法验证,遇到异常优先回看本文的避坑部分。
稳住节奏,你的爬虫就能稳定跑下去。

分享到:
上一篇
服务器被 DDoS 攻击,低预算防护方案
下一篇
Linux 权限设置错误,服务器直接变肉鸡?这 5
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意