首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python爬虫代理IP设置大全:requests、aiohttp、selenium主流库实操指南

Python爬虫代理IP设置大全:requests、aiohttp、selenium主流库实操指南

原创
作者头像
永不掉线的小白
发布2026-06-11 10:40:55
发布2026-06-11 10:40:55
100
举报

爬虫开发中,代理IP是解决IP封禁、高频访问限流、地域访问限制的核心手段。很多新手在实操时,常会出现代理配置无效、连接超时、隐私泄露、异步请求代理不生效等问题,本质是不同爬虫库的代理配置规则、参数格式和适配场景存在差异。

下面整理Python三大主流爬虫库的代理IP完整设置方案,覆盖普通代理、私密代理、随机代理、HTTPS适配、账号密码认证等全场景,代码可直接复用,搭配实操避坑要点,零基础也能轻松上手。

通用前置知识:爬虫代理基础格式

所有Python爬虫库的代理配置,核心都遵循统一的IP格式规范,提前掌握可规避80%的配置错误:

  • 普通公开代理(无认证)协议://IP:端口,示例:http://112.xx.xx.xx:8080
  • 私密代理(账号密码认证)协议://账号:密码@IP:端口,示例:http://user123:pass456@112.xx.xx.xx:8080
  • 主流协议:爬虫优先使用 http/https 协议, socks5 协议适配特殊加密场景,速度更快、兼容性更广

核心原则:访问HTTP网站用HTTP代理,访问HTTPS网站建议配置HTTPS代理,双协议同时配置可实现全场景适配。

Requests库代理设置

Requests是最常用的同步爬虫库,代理配置简单灵活,支持单次请求独立代理、全局会话代理两种模式,适配绝大多数简易爬虫场景。

1. 单次请求设置代理(灵活切换IP)

适合需要每次请求随机更换代理IP的场景,无需全局配置,单次请求生效。

代码语言:javascript
复制
import requests

# www.zdaye.com 
#定义代理字典(同时配置http和https,适配所有网站)
proxies = {
    "http": "http://账号:密码@代理IP:端口",
    "https": "http://账号:密码@代理IP:端口"
}

# 发起请求,传入proxies参数
url = "https://www.66daili.com/ip-location/"  # 测试IP接口,可返回当前请求IP
response = requests.get(url, proxies=proxies, timeout=10)
print(response.text)

2. 全局会话设置代理(持久生效)

适合需要保持会话、多次请求复用同一个代理的场景,避免重复配置,适配需要cookie留存的爬虫。

代码语言:javascript
复制
import requests

# www.zdaye.com 
# 创建会话对象,全局绑定代理
session = requests.Session()
session.proxies = {
    "http": "http://账号:密码@代理IP:端口",
    "https": "http://账号:密码@代理IP:端口"
}

# 多次请求自动复用代理
url = "https://www.66daili.com/ip-location/"
res1 = session.get(url)
res2 = session.get(url)
print(res1.text)

3. Requests代理避坑要点

  • 不要只配置单协议,必须同时填写http和https,否则HTTPS网站请求会直接走本地IP
  • 私密代理的账号密码不能包含特殊符号,若有特殊字符需进行URL编码
  • 添加timeout参数,避免代理失效导致程序卡死

三、Aiohttp库代理设置(异步爬虫专属)

Aiohttp是Python异步爬虫核心库,高并发场景下效率远超同步爬虫,其代理配置和Requests不通用,不支持proxies字典,需单独配置connector参数。

1. 基础异步代理配置(带账号认证)

代码语言:javascript
复制
import aiohttp
import asyncio

async def proxy_spider():
    # 代理地址(私密代理格式)
    proxy = "http://账号:密码@代理IP:端口"
    # 创建连接器,绑定代理
    connector = aiohttp.TCPConnector(ssl=False)  # 关闭SSL校验,避免HTTPS报错
    async with aiohttp.ClientSession(connector=connector) as session:
        async with session.get("https://httpbin.org/ip", proxy=proxy, timeout=aiohttp.ClientTimeout(total=10)) as res:
            print(await res.text())

# 运行异步任务
asyncio.run(proxy_spider())

2. 批量随机代理(高并发必备)

异步爬虫高频请求易触发封禁,可配置代理池随机切换IP,提升稳定性。

代码语言:javascript
复制
import aiohttp
import asyncio
import random

# 代理池列表
proxy_list = [
    "http://账号:密码@IP1:端口",
    "http://账号:密码@IP2:端口",
    "http://账号:密码@IP3:端口"
]

async def batch_spider():
    connector = aiohttp.TCPConnector(ssl=False)
    async with aiohttp.ClientSession(connector=connector) as session:
        # 随机选取代理
        proxy = random.choice(proxy_list)
        res = await session.get("https://httpbin.org/ip", proxy=proxy)
        print(await res.text())

asyncio.run(batch_spider())

3. Aiohttp核心避坑点

  • 禁止使用Requests的proxies字典方式,直接在get/post请求中传入proxy参数才生效
  • 高并发场景必须设置ssl=False,否则大量HTTPS请求会出现SSL连接异常
  • 代理超时单独配置ClientTimeout,精准控制请求耗时

Selenium库代理设置

Selenium用于模拟真实浏览器爬虫,适配JS动态渲染页面,其代理配置是浏览器层级,而非请求层级,配置后浏览器所有网络请求都会走代理,分为Chrome、Firefox两大主流浏览器适配方案。

1. Chrome浏览器代理配置(最常用)

支持普通代理和带账号密码的私密代理,适配新版Chrome驱动。

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

# 配置Chrome参数
chrome_options = Options()
# 设置代理IP(无认证普通代理)
proxy_ip = "代理IP:端口"
chrome_options.add_argument(f"--proxy-server=http://{proxy_ip}")

# 忽略SSL报错
chrome_options.add_argument("--ignore-certificate-errors")
# 启动浏览器
driver = webdriver.Chrome(options=chrome_options)
# 测试访问
driver.get("https://httpbin.org/ip")
print(driver.page_source)
driver.quit()

2. Selenium私密代理(账号密码认证)

Chrome原生参数不支持直接携带账号密码,需通过插件脚本实现认证,适配绝大多数付费私密代理。

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

# 代理信息
proxy_host = "代理IP"
proxy_port = "端口"
proxy_user = "账号"
proxy_pwd = "密码"

# 生成代理认证插件
def create_proxy_plugin():
    manifest = """
    {
        "version": "1.0",
        "manifest_version": 2,
        "name": "Proxy Auth",
        "permissions": ["proxy", "tabs", "<all_urls>"],
        "background": {"scripts": ["background.js"]}
    }
    """
    background = f"""
    chrome.proxy.settings.set({{value:{{mode:"fixed_servers",rules:{{singleProxy:{{scheme:"http",host:"{proxy_host}",port:{proxy_port}}}}}},scope:"regular"}});
    chrome.webRequest.onAuthRequired.addListener(
        function(details){{return {{authCredentials:{{username:"{proxy_user}",password:"{proxy_pwd}"}}}}},
        {{urls:["<all_urls>"]}},
        ["blocking"]
    );
    """
    # 写入插件文件
    with open("manifest.json", "w") as f:
        f.write(manifest)
    with open("background.js", "w") as f:
        f.write(background)
    # 打包插件
    with zipfile.ZipFile("proxy_plugin.zip", "w") as zp:
        zp.write("manifest.json")
        zp.write("background.js")
    return os.path.abspath("proxy_plugin.zip")

# 加载插件启动浏览器
chrome_options = Options()
plugin_path = create_proxy_plugin()
chrome_options.add_extension(plugin_path)
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://httpbin.org/ip")
driver.quit()

3. Selenium代理关键注意事项

  • 代理配置是全局浏览器生效,启动浏览器后无法动态修改,需重启浏览器切换IP
  • 私密代理必须通过插件认证,直接拼接账号密码无法生效
  • 配置代理后务必关闭无痕模式,部分版本Chrome无痕模式会屏蔽代理设置

通用代理避坑终极总结

  1. 协议匹配:请求HTTPS网站优先使用HTTPS代理,避免协议不匹配导致代理失效
  2. 超时配置:所有代理请求必须设置超时时间,防止无效代理阻塞程序
  3. IP有效性校验:正式爬虫前,先用https://www.66daili.com/ip-location/测试代理是否生效
  4. 并发适配:同步爬虫用Requests,高并发场景必用Aiohttp,动态页面专属Selenium,按需选择配置方案
  5. 隐私安全:付费私密代理禁止明文泄露账号密码,批量爬虫建议搭建本地代理池统一调度

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 通用前置知识:爬虫代理基础格式
  • Requests库代理设置
    • 1. 单次请求设置代理(灵活切换IP)
    • 2. 全局会话设置代理(持久生效)
    • 3. Requests代理避坑要点
  • 三、Aiohttp库代理设置(异步爬虫专属)
    • 1. 基础异步代理配置(带账号认证)
    • 2. 批量随机代理(高并发必备)
    • 3. Aiohttp核心避坑点
  • Selenium库代理设置
    • 1. Chrome浏览器代理配置(最常用)
    • 2. Selenium私密代理(账号密码认证)
    • 3. Selenium代理关键注意事项
  • 通用代理避坑终极总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档