用 AI 写 Python 脚本,被反爬检测封禁 IP
为什么AI生成的爬虫脚本容易被反爬封禁IP?
用AI写Python爬虫确实方便,只要描述需求就能快速拿到一个可用脚本。
但AI生成的代码往往只关注基础请求,缺少反爬伪装。
很多网站会通过IP频率、请求头特征、JS检测等手段识别爬虫,一旦触发封禁规则,你的IP就被拉黑了。
本文手把手教你在AI脚本基础上加上反爬措施,让爬虫更安全。
开始前需要准备什么
- 一台可运行Python的电脑(Windows/Mac/Linux均可)
- 安装好Python 3.6以上版本,并配置
pip - 安装常用的请求库:
pip install requests(如果需要解析JS或其他功能,可能还需要selenium或playwright,本文以requests为主) - 一个AI生成的爬虫脚本(例如用ChatGPT写的一个抓取示例)
- 了解目标网站的
robots.txt(非必须但建议看看)
教你一步步改造AI生成的爬虫脚本
第一步:添加随机的User-Agent
很多AI生成的脚本使用默认的User-Agent(如python-requests/2.x),这种特征很容易被识别。
你需要从真实浏览器中复制一个,或者使用fake-useragent库随机切换:
pip install fake-useragent
在脚本中添加:
from fake_useragent import UserAgent
ua = UserAgent()
headers = {'User-Agent': ua.random}
response = requests.get(url, headers=headers)
第二步:控制请求频率,不要像机关枪一样
AI脚本通常不会主动添加延时,你需要手动设置每次请求之间的间隔。建议至少等待1-3秒,如果网站对频率敏感,可以再增加:
import time
import random
# 在每次请求后
time.sleep(random.uniform(1, 3)) # 随机1到3秒
第三步:使用代理IP,分散请求来源
如果爬取量大,单IP很容易被封。
你可以购买代理服务,或者使用免费代理(但稳定性差)。
以付费代理为例,通常需要设置proxies参数:
proxies = {
'http': 'http://your_proxy_ip:port',
'https': 'https://your_proxy_ip:port'
}
response = requests.get(url, headers=headers, proxies=proxies)
注意:AI脚本可能需要添加异常处理,方便代理失效时自动切换。
第四步:模拟浏览器Cookie和Referer
有些网站要求携带特定的Cookie或Referer。
你可以在浏览器中访问目标网站,复制请求头中的Cookie信息,添加到脚本里:
headers['Cookie'] = 'your_real_cookie'
headers['Referer'] = 'https://example.com'
如果网站使用了登录态,建议先手动登录获取Cookie。
避坑高频问题与封禁后处理
常见反爬检测手段
- 请求头检测:缺少
Accept-Language、Connection等字段,容易被标记。建议用浏览器开发者工具复制完整请求头。 - JS验证:有些网站需要执行JavaScript才能返回数据,单纯的
requests无法处理。此时需要改用selenium或playwright模拟浏览器。 - CAPTCHA:遇到滑块或验证码,需要人工介入或打码平台。
如果已经被封IP怎么办?
- 更换IP:如果是家庭宽带,可以重启路由器获取新IP(大部分运营商是动态IP)。如果是服务器,可以联系服务商换IP。
- 使用代理池轮换:在脚本中集成代理池,每次请求随机从列表中选一个代理,这样即使个别代理被封也不影响整体。
- 降低请求频率:被封后先暂停一段时间(比如30分钟),再重新尝试。
如何验证脚本真的绕过了反爬
- 观察返回的状态码:如果返回200说明正常,如果是403或429说明被拦截。
- 检查返回的内容:如果返回的是空数据、验证码页面或错误提示,说明被识别了。
- 用浏览器手动访问目标页面,对比爬虫返回的HTML结构是否一致。
- 建议先在本地用小规模数据测试,确认无误后再扩大爬取范围。
总结
用AI写爬虫脚本虽然快,但反爬环节不能省。核心就是伪装成普通浏览器用户:随机UA、合理延时、使用代理、补充请求头。
遇到封禁也不要慌,先降低频率并更换IP。
按照本文步骤改造后,你的爬虫脚本就能平稳运行,不再频繁被封IP。