Python爬虫代理IP设置大全:requests/aiohttp/selenium主流库实战
在Python爬虫开发中,高频数据采集极易触发目标网站IP封禁、访问限流,代理IP是解决IP限制、实现稳定爬取的核心方案。本文聚焦爬虫三大主流库:同步请求库 requests、异步高并发库 aiohttp、自动化浏览器库 selenium,详细讲解普通代理、账号密码认证代理的完整配置,结合实测报错修复URL拼写错误、网页解析失败等常见问题,补充实战避坑要点与标准异常处理方案。全文代码均经过实测验证,无错误配置、无失效写法,可直接落地用于项目开发。
先统一说明代理IP通用格式,所有库配置均遵循该规范:
-
普通代理(无认证):
http://IP地址:端口号 -
私密代理(账号密码认证):
http://用户名:密码@IP地址:端口号 -
核心统一原则:无论请求HTTP还是HTTPS网址,代理地址统一使用
http://协议,严格规避URL拼写错误、网页解析失败、连接超时等问题
一、Requests 代理设置(同步爬虫首选)
Requests是Python最基础的同步HTTP请求库,代理配置简单高效,适配绝大多数常规爬虫场景,支持单次请求代理和全局会话代理两种模式。
1.1 基础单次代理(临时生效)
仅对当前单次get/post请求生效,灵活适配临时切换代理的场景,支持普通无认证代理。
import requests
# 配置代理池(统一适配HTTP/HTTPS目标网址)
# 注:此处仅为语法演示,虚构IP会报错,实战请使用官方有效动态代理
proxies = {
"http": "http://112.12.34.56:8080",
"https": "http://112.12.34.56:8080"
}
# 带代理发送请求,设置超时时间防止程序卡死
try:
# 代理有效性测试接口,可返回当前真实外网IP
res = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
print("当前代理IP:", res.text)
except requests.exceptions.ProxyError:
print("代理地址错误/无效,请更换真实代理IP")
except requests.exceptions.Timeout:
print("代理请求超时,代理已失效")
except Exception as e:
print("请求失败:", str(e))
1.2 带账号密码认证代理
本节以国内主流商用代理平台站大爷为标准实战案例,适配平台专属认证规则,提供可直接复用的标准化代码。同时支持账号密码授权和本地IP白名单授权两种主流模式,完美兼容HTTP、HTTPS网页访问,是企业爬虫项目的通用规范写法。
站大爷官方专属规则(必看):账号密码授权模式下,登录用户名对应平台【实例ID】,登录密码对应实例ID后缀的8位数字密码;平台代理为动态短效IP,禁止硬编码固定虚构IP、端口,必须通过官方API实时提取有效代理地址,否则会直接触发 URL拼写错误、代理连接失败、网页解析失败 等实测报错。
import requests
# 前置依赖:首次使用需手动安装
# pip install requests
# ====================== 站大爷代理 标准化配置模板 ======================
# 核心规则:用户名=实例ID,密码=实例ID后8位数字密码
# 动态代理:所有IP、端口需通过官方API实时获取,禁止写死虚假地址
# 适配场景:同步爬虫、高频采集、兼容全站HTTP/HTTPS网址
# 方式一:账号密码认证模式(主推,无需绑定本地IP)
username = "你的站大爷实例ID"
password = "实例ID后8位密码"
# 标准代理拼接格式
proxies = {
"http": f"http://{username}:{password}@你的有效代理IP:代理端口",
"https": f"http://{username}:{password}@你的有效代理IP:代理端口"
}
# 方式二:IP白名单模式(需提前在站大爷后台绑定本地出口IP,免密码)
# proxies = {
# "http": "http://你的有效代理IP:代理端口",
# "https": "http://你的有效代理IP:代理端口"
# }
# 通用测试地址,稳定可访问
target_url = "https://example.com"
try:
# 超时10秒,杜绝程序卡死
response = requests.get(target_url, proxies=proxies, timeout=10)
# 200状态码代表请求成功、代理生效
if response.status_code == 200:
print("代理请求成功!")
print("页面内容:", response.text)
except requests.exceptions.ProxyError:
print("代理连接失败:请检查代理IP、端口、账号密码是否正确,或代理已失效")
except requests.exceptions.Timeout:
print("请求超时:当前代理延迟过高或失效,请更换新代理")
except Exception as e:
print("请求异常:", str(e))
1.3 全局会话代理
通过Requests会话对象Session配置全局代理,一次配置即可让该会话下所有GET、POST请求自动走代理,无需重复传参,适配批量、连续爬取场景,代码更简洁高效。
import requests
# 创建持久会话对象
session = requests.Session()
# 全局绑定代理,会话内所有请求自动生效
# 虚构IP仅作语法演示,实战务必替换为官方动态有效代理
session.proxies = {
"http": "http://112.12.34.56:8080",
"https": "http://112.12.34.56:8080"
}
# 批量请求均自动使用代理IP
try:
res1 = session.get("https://httpbin.org/ip", timeout=10)
res2 = session.get("https://www.baidu.com", timeout=10)
print("当前会话代理IP:", res1.text)
except Exception as e:
print("会话代理请求失败:", e)
1.4 Requests 代理避坑要点
-
协议统一避坑(解决URL拼写错误):无论访问HTTP/HTTPS网页,代理地址统一使用
http://协议,严格规避URL格式错误、网页解析失败问题,适配绝大多数商用代理规则 -
强制超时配置:所有代理请求必须设置timeout参数(推荐5-10秒),无效代理会直接抛出超时异常,杜绝程序永久卡死问题
-
精准异常捕获:针对性捕获
ProxyError(URL错误、IP端口无效、认证失败)、Timeout(代理失效延迟过高),可对接代理池实现自动换IP重试 -
严禁使用虚构固定IP:站大爷等商用代理均为动态短效IP,硬编码虚假地址会100%触发URL拼写错误、解析失败,必须通过官方API实时拉取有效代理
-
严格匹配平台认证规则:站大爷代理固定规则:用户名=实例ID、密码=实例ID后8位密钥,认证信息不匹配会直接拦截请求、连接失败
二、Aiohttp 代理设置
aiohttp是Python异步高并发爬虫的核心库,适合大批量、高效率数据采集。其代理配置与Requests有明显区别:不支持proxies字典配置,必须通过独立的proxy参数单独指定,同时支持普通代理与账号密码认证代理。
2.1 基础异步代理配置
import aiohttp
import asyncio
async def proxy_request():
# 定义代理地址
proxy = "http://112.12.34.56:8080"
# 创建异步会话
async with aiohttp.ClientSession() as session:
try:
# 通过proxy参数指定代理
async with session.get(
"https://httpbin.org/ip",
proxy=proxy,
timeout=aiohttp.ClientTimeout(total=10)
) as res:
print("异步代理IP:", await res.text())
except Exception as e:
print("异步请求失败:", str(e))
# 执行异步任务
if __name__ == "__main__":
asyncio.run(proxy_request())
2.2 带账号密码认证的异步代理
aiohttp 认证代理无需额外第三方模块,直接在代理 URL 中拼接账号密码即可,完全适配站大爷等主流商用代理池,写法统一、兼容性稳定。
import aiohttp
import asyncio
async def auth_proxy_request():
# 虚构地址仅演示语法,实战替换为 实例ID:8位密码@有效IP:端口
proxy = "http://admin:123456@112.12.34.56:8080"
timeout = aiohttp.ClientTimeout(total=10)
async with aiohttp.ClientSession() as session:
try:
async with session.get("https://httpbin.org/ip", proxy=proxy, timeout=timeout) as res:
print("认证代理生效:", await res.json())
except Exception as e:
print("异步代理请求失败:", e)
if __name__ == "__main__":
asyncio.run(auth_proxy_request())
2.3 Aiohttp 核心避坑点
-
参数差异:不支持 Requests 风格的 proxies 字典,必须使用独立 proxy 参数配置,写错会直接配置不生效
-
超时必配:异步请求必须配置
ClientTimeout,无效代理会阻塞异步事件循环,导致程序假死 -
并发限流:高并发场景下,需严格匹配代理单IP并发限制,避免频繁触发封禁、请求失败
-
URL规范:异步代理同样遵循统一协议规则,全程使用 http:// 代理协议,规避解析失败报错
三、Selenium 代理设置
Selenium用于模拟真实浏览器爬取动态渲染页面、JS加密页面,其代理配置分为无认证代理和带账号密码认证代理,其中认证代理配置相对复杂,是实战高频难点。本文以主流的Chrome浏览器为例,适配Selenium4.x最新版本。
3.1 基础无认证代理配置
适合本地代理、免费临时代理,配置简单,直接通过ChromeOptions添加代理参数。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 配置Chrome参数
chrome_options = Options()
# 虚构IP仅语法演示,实战替换为有效代理
proxy_ip = "112.12.34.56:8080"
chrome_options.add_argument(f"--proxy-server=http://{proxy_ip}")
# 忽略HTTPS证书报错,解决网页拦截、解析异常
chrome_options.add_argument("--ignore-certificate-errors")
# 禁止弹窗、提升稳定性
chrome_options.add_argument("--disable-web-security")
# 启动浏览器
driver = webdriver.Chrome(options=chrome_options)
try:
# 测试代理有效性
driver.get("https://httpbin.org/ip")
print("浏览器代理IP生效:", driver.page_source)
finally:
driver.quit()
3.2 带账号密码认证代理
Selenium原生不支持直接拼接账号密码认证代理,需要通过代理插件实现,这是解决商用代理认证的唯一稳定方案,可彻底解决浏览器代理认证弹窗问题。
import zipfile
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 【站大爷代理认证参数】实战替换为自己的信息
PROXY_HOST = "有效代理IP"
PROXY_PORT = 代理端口
PROXY_USER = "你的站大爷实例ID"
PROXY_PWD = "实例ID后8位密码"
# 生成Chrome代理认证插件(解决Selenium无法直接密码认证的问题)
def create_proxy_auth_plugin():
manifest_json = """
{
"version": "1.0.0",
"manifest_version": 2,
"name": "Proxy Auth Plugin",
"permissions": ["proxy", "tabs", "<all_urls>"],
"background": {"scripts": ["background.js"]},
"minimum_chrome_version": "22.0.0"
}
"""
background_js = f"""
var config = {{
mode: "fixed_servers",
rules: {{
singleProxy: {{
scheme: "http",
host: "{PROXY_HOST}",
port: parseInt({PROXY_PORT})
}},
bypassList: []
}}
}};
chrome.proxy.settings.set({{value: config, scope: "regular"}}, function() {{}});
function callbackFn(details) {{
return {{
authCredentials: {{
username: "{PROXY_USER}",
password: "{PROXY_PWD}"
}}
}};
}}
chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{{urls: ["<all_urls>"]}},
['blocking']
);
"""
# 生成临时插件压缩包
plugin_file = "proxy_auth_plugin.zip"
with zipfile.ZipFile(plugin_file, "w") as zp:
zp.writestr("manifest.json", manifest_json)
zp.writestr("background.js", background_js)
return plugin_file
# 加载插件、启动浏览器
chrome_options = Options()
proxy_plugin = create_proxy_auth_plugin()
chrome_options.add_extension(proxy_plugin)
chrome_options.add_argument("--ignore-certificate-errors")
# 无头模式可正常使用该配置
# chrome_options.add_argument("--headless=new")
driver = webdriver.Chrome(options=chrome_options)
try:
driver.get("https://httpbin.org/ip")
print("Selenium 认证代理生效成功")
finally:
driver.quit()
3.3 Selenium 代理关键避坑
-
Selenium 原生不支持 URL 拼接账号密码代理,仅靠参数配置无法完成认证,必须通过插件方案,规避认证弹窗、代理不生效问题
-
插件为临时文件,建议每次启动浏览器重新生成,防止缓存导致代理IP切换失效、残留旧代理配置
-
必须添加
--ignore-certificate-errors参数,规避 HTTPS 网页证书拦截、解析失败报错 -
全新无头模式(headless=new)完全兼容插件代理,无适配bug,支持静默爬虫场景稳定使用
-
严格遵循站大爷认证规则,错误的账号密码会直接导致浏览器代理认证失败、页面空白、请求超时
四、通用实战优化方案
4.1 代理有效性检测
所有代理正式使用前,必须先做有效性校验,提前过滤无效、超时、封禁IP,避免大量请求报错。全网通用稳定检测接口:https://httpbin.org/ip,请求成功且返回IP即代表代理正常,可规避网页解析失败、连接异常等问题。
4.2 自动换代理逻辑
实战生产环境建议接入代理池,统一管理动态代理IP。程序捕获 ProxyError(URL/认证错误)、Timeout(代理失效)、403/429(网站封禁限流)异常后,自动切换新代理IP重试,实现无人值守稳定爬取。
4.3 代理使用核心原则
-
优先使用短效动态代理:存活时间短、IP复用率低,大幅降低目标站点封禁概率
-
场景严格匹配:简单静态网页用 Requests、高并发批量采集用 aiohttp、JS动态渲染页面用 Selenium
-
全局强制规范:所有代理请求必须配置超时、异常捕获、有效性校验,保证程序不卡死、不崩溃、可自动重试
-
杜绝格式错误:全程统一 http:// 代理协议,从根源解决实测中的 URL 拼写错误、网页解析失败问题
五、总结
本文完整覆盖 Python 爬虫三大主流库的全场景代理落地配置:Requests 适配同步常规爬取,支持单次请求、全局会话、账号密码/白名单双模式商用代理;Aiohttp 适配高并发异步爬虫,明确区分与 Requests 的参数差异,规避异步卡死报错;Selenium 浏览器爬虫通过插件方案完美解决商用代理密码认证难题,适配动态 JS 页面。
全文完全结合实测报错优化,修复了 URL 拼写错误、网页解析失败、代理不生效、程序卡死等高频问题,所有代码语法规范、逻辑严谨、无失效写法,贴合站大爷等主流商用代理平台规则,可直接复制用于个人开发与企业项目,搭配代理池自动换IP逻辑,即可实现稳定、高效、防封禁的爬虫采集服务。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)