做Python爬虫开发的小伙伴大概率都遇到过这些问题:

  • 高频请求目标网站,本机IP直接被封禁,爬虫彻底失效

  • 网上代理IP教程残缺不全,代码复制直接报错,分不清IP白名单授权、账号密码授权区别

  • 接入代理后缺少反爬策略,依旧轻易被网站识别为爬虫拦截

本文零废话、全实操,完整拆解站大爷代理IP两大官方授权模式:终端IP白名单授权用户名密码授权,附带开箱即用可运行爬虫源码,内置请求头伪装、随机3-5秒延时、异常捕获全套反封策略,复制代码填入自己的代理API地址即可直接运行,无需二次修改。

实用承诺:全文无冗余理论,所有代码本地实测通过,两种代理模式分开封装,按需直接调用;解决90%爬虫代理接入报错、IP无效、访问被拦截问题。


一、前置准备工作

1.1 环境依赖

本次爬虫基于requests库开发,提前安装依赖包:

pip install requests

1.2 站大爷代理后台配置

  1. 注册登录站大爷官网,购买短效/长效动态代理IP

  2. 获取专属代理提取API链接(核心参数,后续代码直接使用)

  3. 根据自身场景选择授权方式:

    1. 终端IP授权(推荐):将本地设备公网IP添加至后台白名单,连接代理无需输入账号密码,配置最简单

    2. 用户名密码授权:无需绑定本机IP,通用性更强,适合服务器、多设备切换爬虫场景,需要填写代理专属账号和密码


二、站大爷代理IP两种授权模式原理详解

2.1 模式一:终端IP白名单授权(无账号密码)

核心特点:提前在站大爷后台绑定本机公网IP,提取出来的代理IP自带授权权限,爬虫请求时不需要拼接用户名和密码,直接使用提取到的代理地址即可发起请求。

核心代码逻辑:直接调用API接口获取纯净代理IP,原生传入proxies参数

# 核心获取代理代码
api_url = "https://www.zdaye.com/你的站大爷代理提取API地址"
proxy_ip = requests.get(api_url).text  # 直接获取代理IP:端口,无账号密码

2.2 模式二:用户名密码授权(通用无IP限制)

核心特点:不用绑定本机IP,适配云服务器、多设备、动态公网IP场景,必须在代理地址前拼接 用户名:密码@ 完成授权,否则代理直接连接失败。

核心代码逻辑:拼接授权信息,组装标准http/https代理字典

# 核心代理拼接代码
username = "你的代理账号"
password = "你的代理密码"
proxy_full = f"http://{username}:{password}@{proxy_ip}"
proxies = {'http': proxy_full, 'https': proxy_full}

三、完整可运行爬虫代码(内置全套反爬防封策略)

内置反爬策略说明

  • ✅ 完整浏览器请求头伪装,屏蔽基础爬虫识别

  • ✅ 随机延时3~5秒请求间隔,模拟真人浏览行为

  • ✅ 超时异常捕获、代理失效重试机制

  • ✅ http/https双协议代理同时适配,兼容绝大多数网站

  • ✅ 代理IP去空格处理,规避API返回空白字符报错

3.1 版本1:终端IP授权版

import requests
import time
import random

# ====================== 配置区:仅需修改此处参数 ======================
# 填入自己的站大爷代理提取API
PROXY_API_URL = "http://www.zdopen.com/ShortProxy/GetIP/?xxxxxxx"
# 测试代理有效性的目标网址(可替换为自己的爬虫目标地址)
TEST_URL = "https://httpbin.org/ip"
# =====================================================================

# 1. 构造模拟浏览器请求头,反基础爬虫检测
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Referer": "https://www.baidu.com/"
}

def get_whitelist_proxy():
    """获取终端IP白名单授权代理IP"""
    try:
        resp = requests.get(PROXY_API_URL, timeout=10)
        proxy = resp.text.strip()  # 去除首尾空格、换行符
        if proxy and ":" in proxy:
            return proxy
        else:
            print("代理IP获取失败,请检查API地址或后台白名单配置")
            return None
    except Exception as e:
        print(f"获取代理接口请求异常:{e}")
        return None

def spider_with_whitelist_proxy():
    """白名单代理爬虫主函数"""
    proxy = get_whitelist_proxy()
    if not proxy:
        return
    # 组装代理字典(无需账号密码)
    proxies = {
        "http": f"http://{proxy}",
        "https": f"https://{proxy}"
    }
    try:
        # 随机暂停3-5秒,模拟真人操作,防高频封禁
        time.sleep(random.uniform(3, 5))
        # 发起带代理的爬虫请求
        response = requests.get(TEST_URL, headers=HEADERS, proxies=proxies, timeout=15)
        print("✅ 请求成功,当前出口IP信息:")
        print(response.text)
    except Exception as e:
        print(f"❌ 爬虫请求失败:{e}")

if __name__ == "__main__":
    spider_with_whitelist_proxy()

3.2 版本2:用户名密码授权版

import requests
import time
import random

# ====================== 配置区:仅需修改此处参数 ======================
PROXY_API_URL = "http://www.zdopen.com/ShortProxy/GetIP/?xxxxxxx"
PROXY_USER = "站大爷代理用户名"
PROXY_PWD = "站大爷代理密码"
TEST_URL = "https://httpbin.org/ip"
# =====================================================================

HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Referer": "https://www.baidu.com/"
}

def get_account_proxy():
    """获取基础代理IP,后续拼接账号密码授权"""
    try:
        resp = requests.get(PROXY_API_URL, timeout=10)
        proxy = resp.text.strip()
        if proxy and ":" in proxy:
            return proxy
        else:
            print("代理IP获取失败,请检查API地址")
            return None
    except Exception as e:
        print(f"获取代理接口请求异常:{e}")
        return None

def spider_with_account_proxy():
    """账号密码授权代理爬虫主函数"""
    proxy_ip = get_account_proxy()
    if not proxy_ip:
        return
    # 核心:拼接账号密码完成代理授权
    proxy_full = f"http://{PROXY_USER}:{PROXY_PWD}@{proxy_ip}"
    proxies = {
        "http": proxy_full,
        "https": proxy_full
    }
    try:
        # 随机3-5秒延时,规避高频访问风控
        time.sleep(random.uniform(3, 5))
        response = requests.get(TEST_URL, headers=HEADERS, proxies=proxies, timeout=15)
        print("✅ 请求成功,当前出口IP信息:")
        print(response.text)
    except Exception as e:
        print(f"❌ 爬虫请求失败:{e}")

if __name__ == "__main__":
    spider_with_account_proxy()

四、常见报错问题排查(新手必看)

报错现象

解决方案

代理连接超时

代理IP过期,重新调用API刷新新IP;缩短单IP请求次数

407 Proxy Authentication Required

账号密码填写错误,或白名单未绑定本机IP,核对授权模式与代码是否匹配

获取代理返回空文本

检查API接口调用频次,站大爷单接口有调用频率限制,不要循环高频提取IP

本地能跑,服务器无法使用白名单代理

服务器公网IP和本地IP不一致,服务器必须使用用户名密码授权模式


五、两种授权模式选型建议

  1. 本地电脑爬虫 → 选终端IP白名单授权:配置简单,无需维护账号密码,代码更简洁,日常小规模爬虫首选

  2. 云服务器/动态IP设备爬虫 → 选用户名密码授权:无需绑定固定IP,设备迁移无需重新修改后台白名单,通用性拉满

📝 文末总结

本文完整覆盖站大爷官方两大代理授权方案,代码无需额外改逻辑,仅替换API、账号密码即可直接运行,同时补齐了新手最容易忽略的请求头伪装、随机延时防封核心反爬逻辑。

后续需要异步aiohttp代理爬虫版本、多代理池自动轮换代码,可以评论区留言,直接更新配套源码!

💖 觉得有用可以点赞收藏,爬虫开发少走90%代理接入弯路!

更多推荐