首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python爬虫代理IP配置模板|自用半年、直接套用不踩坑

Python爬虫代理IP配置模板|自用半年、直接套用不踩坑

原创
作者头像
永不掉线的小白
发布2026-08-17 15:11:13
发布2026-08-17 15:11:13
1260
举报

分享一套我自己实打实用了整整半年的爬虫代理IP模板,日常爬数据完全够用。适配绝大多数Python爬虫场景,静态代理、动态秒切IP都能跑,自带自动重试、失效重连、防封禁逻辑,requests、selenium两大主流爬虫库全都兼容。代码没有多余冗余,只需替换自己的代理账号密码,直接复制就能用,再也不用头疼爬虫被封IP、限流、高频拦截的问题。

这套模板是半年线上实战打磨出来的,专门避开了新手常踩的各种坑:代理残留、请求超时卡死、反复用失效IP、请求头和代理不匹配导致的403封禁等等,日常爬取稳定性拉满。

一、这套模板的超实用亮点

  • 开箱即用,零改造:不用改逻辑、不用重构代码,只替换代理IP、账号密码就能直接跑
  • 智能容错,不中断爬虫:自动识别失效代理,自动跳过无效IP并重试,不会因为单个IP挂掉导致整个爬虫停摆
  • 自带防封禁buff:内置超时限制、随机请求间隔、浏览器UA伪装,最大程度降低网站风控检测
  • 兼容性拉满:支持HTTP/HTTPS全协议,静态长效IP、动态短效秒换IP都能适配
  • 稳定省心:半年持续使用,修复了超时卡死、代理挂载失败、重复报错等各类小bug

二、可直接运行代码(Requests通用版)

日常静态、动态代理爬网页首选,逻辑封装齐全,支持批量请求、自动换IP、失败重试,适配90%的普通网页爬虫场景。

代码语言:javascript
复制
import requests
import random
import time
from requests.exceptions import ProxyError, Timeout, ConnectionError

# ====================== 【核心配置区 - 仅改这里即可】 ======================
# 替换成你自己的代理信息(静态IP/动态隧道代理都支持)
PROXY_HOST = "你的代理IP地址"
PROXY_PORT = "代理端口"
PROXY_USER = "代理账号"
PROXY_PWD = "代理密码"

# 爬虫自定义参数,按需微调
REQUEST_TIMEOUT = 10  # 单次请求超时时间
RETRY_TIMES = 3       # 失败最大重试次数
MIN_SLEEP = 0.5       # 最小请求间隔
MAX_SLEEP = 1.5       # 最大请求间隔
# ==========================================================================

# 统一获取代理配置,全局复用
def get_proxy():
    """组装代理链接,全局统一调用"""
    proxy_url = f"http://{PROXY_USER}:{PROXY_PWD}@{PROXY_HOST}:{PROXY_PORT}"
    proxies = {
        "http": proxy_url,
        "https": proxy_url
    }
    return proxies

# 模拟真实浏览器请求头,规避基础风控
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": "*/*",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Connection": "keep-alive"
}

def spider_request(url, method="GET", data=None, params=None):
    """
    带代理、随机延时、失败重试的通用请求方法
    完美适配常规爬虫,不用重复写容错逻辑
    """
    # 随机休眠,模拟人工操作,避免高频请求被检测
    time.sleep(random.uniform(MIN_SLEEP, MAX_SLEEP))
    
    for i in range(RETRY_TIMES):
        try:
            # 发起带代理的网络请求
            response = requests.request(
                method=method,
                url=url,
                headers=HEADERS,
                proxies=get_proxy(),
                data=data,
                params=params,
                timeout=REQUEST_TIMEOUT,
                verify=False  # 关闭SSL验证,解决代理HTTPS报错问题
            )
            
            # 校验响应状态,只保留有效请求
            if response.status_code in [200, 201, 204]:
                return response
            else:
                print(f"请求状态码异常:{response.status_code},正在第{i+1}次重试")
                continue
                
        except (ProxyError, ConnectionError):
            print(f"代理连接失败/IP失效,正在第{i+1}次重试")
            # 动态代理可在此添加刷新IP逻辑
            time.sleep(1)
        except Timeout:
            print(f"请求超时,正在第{i+1}次重试")
            time.sleep(1)
        except Exception as e:
            print(f"请求异常:{str(e)},正在第{i+1}次重试")
            time.sleep(1)
    
    print(f"请求彻底失败,已达最大重试次数:{RETRY_TIMES}")
    return None

# 测试代理是否生效
if __name__ == "__main__":
    test_url = "http://httpbin.org/ip"
    res = spider_request(test_url)
    if res:
        print("✅ 代理配置生效!当前IP:", res.text)
    else:
        print("❌ 代理配置失败,请检查账号、密码、IP端口是否正确")

三、Selenium无头浏览器代理模板(适配动态JS网页)

针对需要JS渲染的动态网页,专门适配了Selenium无头模式,完美解决浏览器爬虫IP被封的问题,同样是半年实测稳定版本。

代码语言:javascript
复制
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

# ====================== 【核心配置区 - 按需修改】 ======================
PROXY_HOST = "你的代理IP地址"
PROXY_PORT = "代理端口"
PROXY_USER = "代理账号"
PROXY_PWD = "代理密码"
# ==========================================================================

def init_proxy_chrome_driver():
    """初始化带代理的无痕Chrome浏览器,自带防检测配置"""
    chrome_options = Options()
    
    # 基础反爬检测配置,规避selenium原生特征
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-dev-shm-usage")
    chrome_options.add_argument("--disable-blink-features=AutomationControlled")
    chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
    chrome_options.add_experimental_option("useAutomationExtension", False)
    
    # 绑定代理配置
    proxy_auth = f"{PROXY_USER}:{PROXY_PWD}@{PROXY_HOST}:{PROXY_PORT}"
    chrome_options.add_argument(f"--proxy-server=http://{proxy_auth}")
    
    # 无头模式(生产环境开启,调试时可注释掉)
    chrome_options.add_argument("--headless=new")
    
    driver = webdriver.Chrome(options=chrome_options)
    driver.implicitly_wait(5)
    return driver

# 浏览器代理测试
if __name__ == "__main__":
    driver = init_proxy_chrome_driver()
    driver.get("http://httpbin.org/ip")
    time.sleep(2)
    print("✅ 浏览器当前代理IP:", driver.page_source)
    driver.quit()

四、半年实战干货|使用技巧+避坑指南

1. 动态代理进阶用法

如果用的是短效秒换动态代理,建议在请求重试的逻辑里加一段IP刷新接口,每次重试都换一个全新IP,基本能杜绝IP封禁问题,爬取成功率直接拉满。

2. 常见报错快速解决

  • HTTPS证书报错:代码已经默认关闭SSL验证(verify=False),绝大多数证书问题都能解决,无需额外修改
  • 代理频繁失效:别用免费公共代理!换成付费私密代理,适当调大请求间隔、增加重试次数,稳定性会大幅提升
  • 频繁403被封:定期更新UA请求头,不要固定请求频率,拉大随机休眠区间,模拟人工浏览节奏

3. 生产环境优化小建议

  • 批量大规模爬取的话,建议加个代理池,随机轮换IP,比单代理稳定太多
  • 可以新增日志记录功能,保存代理失效、请求失败记录,方便后续排查问题
  • 高频爬取场景适当放宽休眠时间,平衡爬取效率和风控安全,稳优先于快

五、超简单使用步骤

  1. 安装依赖库:pip install requests selenium
  2. 替换配置区的代理IP、端口、账号密码信息
  3. 运行测试代码,通过httpbin接口确认代理生效
  4. 替换成自己的目标爬取链接,直接调用函数即可批量爬取

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、这套模板的超实用亮点
  • 二、可直接运行代码(Requests通用版)
  • 三、Selenium无头浏览器代理模板(适配动态JS网页)
  • 四、半年实战干货|使用技巧+避坑指南
    • 1. 动态代理进阶用法
    • 2. 常见报错快速解决
    • 3. 生产环境优化小建议
  • 五、超简单使用步骤
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档