代理ip自动化脚本,Python定时切换节点防封模板分享
【为什么你的爬虫老被封?】
写爬虫最怕啥?不是反爬验证码,也不是滑块,而是“IP被封”!同一IP狂刷100次,目标网站直接送你403大礼包。手动换代理?太慢;买一堆IP不会轮询?浪费钱。今天直接甩你一套“Python代理ip定时切换脚本”,复制就能跑,防封率嗖嗖涨。
【脚本核心思路:定时+轮询+异常重试】
一句话:让程序自己挑代理,失败就换,成功就采,全程不用你管。
- 提前把API链接(比如站大爷、流冠、阿布云)写进config,脚本每N分钟拉一次新IP列表;
- 用队列做轮询,每次请求pop一个IP,返回403或超时立即丢进“黑名单”,自动补新IP;
- 加装饰器@retry,捕获Requests异常立刻重试,最多换3个节点,还不行再记录日志,方便回滚。
整套逻辑封装成class,30行代码,新手也能看懂。
【零依赖极简代码模板】
import requests, schedule, time, random
from itertools import cycle
PROXY_API = '你的API地址&num=5'
CHECK_URL = 'https://httpbin.org/ip'
TIMEOUT = 8
def fetch_ips():
return [f"http://{ip}" for ip in requests.get(PROXY_API).text.strip().split('rn')]
pool = cycle(fetch_ips())
def job():
while True:
proxy = next(pool)
try:
r = requests.get(CHECK_URL, proxies={'http': proxy, 'https': proxy}, timeout=TIMEOUT)
print('当前出口IP:', r.json()['origin'])
break
except:
print('节点失效,自动切换')
continue
schedule.every(5).minutes.do(job)
job() # 先跑一遍
while True: schedule.run_pending(); time.sleep(1)
把CHECK_URL换成你要爬的域名,5分钟一轮询,基本告别封IP。想再稳一点?把schedule改成30秒,配合随机User-Agent,反爬直接懵。
【进阶玩法:Redis去重+异步协程】
单线程太慢?上asyncio+aiohttp,1000并发轻松飞。IP池放Redis,set类型自动去重,再用协程消费,速度×10。代码太长这里不展开,文末微信发你完整版。
【免费代理能不能用?】
能,但别省那几块钱。免费IP存活率5%,耽误一小时电费都不止5块。建议直接买高匿稳定池,平均2分钱一个IP,跑一天成本一瓶可乐,账号却安全得多。
【常见坑排雷】
- 只换IP不换Header,照样被封;
- HTTPS站点忘记加https代理,请求直接裸奔;
- 代理返回“200”但内容是验证码,记得加关键字检测;
- Windows定时任务会睡死,用Linux+tmux保活。
【一句话总结】
脚本给你了,思路也透了,剩下的就是“稳定代理源”。采购代理IP请添加微信客户经理:x31471626
阅读全文
评论0