🎯 一款可定制、具备反检测功能的云浏览器,由自主研发的 Chromium驱动,专为网页爬虫AI 代理设计。👉立即试用
返回博客

如何在Python中轮换代理:网络爬虫实用指南

Michael Lee
Michael Lee

Expert Network Defense Engineer

21-Nov-2025
快速查看

使用 Requests、AIOHTTP 和 Scrapy 在 Python 中掌握代理轮换,以克服 IP 封禁并通过 Scrapeless Proxies 优化您的网络爬虫流程。

Python 是网络爬虫和数据收集的首选语言,得益于强大的库,如 requestsaiohttpScrapy。然而,随着反机器人措施变得愈加复杂,依靠单一 IP 地址进行大规模爬虫将不可避免地导致 IP 封禁和限制。

代理轮换 是一种基本技术,用于在一组 IP 地址之间分配请求,使爬虫活动看起来更加自然,防止被侦测。该指南提供了一些实用的、基于代码的实现 Python 中代理轮换的方法,并强调使用像 Scrapeless Proxies 这样的完全托管解决方案的好处。

什么是代理轮换,为什么它是必要的?

代理轮换 是一种自动更改每个请求所使用的 IP 地址(或在设定的请求数量之后)以访问目标网站的过程。

这是必要的,因为:

  • 防止 IP 封禁: 目标网站跟踪来自单个 IP 的请求量和频率。轮换确保没有单个 IP 被压垮,从而防止临时或永久封禁。
  • 绕过速率限制: 通过轮换 IP,您可以有效地规避服务器端的速率限制,这些限制旨在减缓自动化流量。
  • 保持匿名性: 它增加了跟踪的复杂性,这对于 市场调研 和竞争情报收集至关重要。

在 Python 中实现代理轮换

代理轮换的方式取决于您使用的 Python 库。以下是三种常见的方法。

1. 使用 requests 库进行轮换

requests 库是简单 HTTP 请求最流行的选择。此处的轮换涉及维护一个代理列表并随机选择一个进行每次请求。

python Copy
import random
import requests

# 定义代理列表(用您的实际代理列表替换)
def get_random_proxy():
    proxies = [
        "http://user:pass@ip1:port",
        "http://user:pass@ip2:port",
        "http://user:pass@ip3:port",
        # 在此添加更多代理...
    ]
    # 随机选择一个代理
    return random.choice(proxies)

def make_rotated_request(url):
    proxy_url = get_random_proxy()
    proxies = {
        "http": proxy_url,
        "https": proxy_url,
    }
    try:
        response = requests.get(url, proxies=proxies, timeout=10)
        response.raise_for_status()
        print(f"使用 IP 成功: {response.json().get('origin')}")
        return response
    except requests.exceptions.RequestException as e:
        print(f"代理 {proxy_url} 请求失败: {e}")
        return None

# 示例用法
for i in range(5):
    make_rotated_request("https://httpbin.io/ip")

2. 使用 aiohttp(异步)进行轮换

对于高性能的并发爬虫,aiohttp 是首选。轮换可以通过在创建异步任务时循环设置代理列表来管理。

python Copy
import asyncio
import aiohttp

proxies_list = [
    "http://user:pass@ip1:port",
    "http://user:pass@ip2:port",
    "http://user:pass@ip3:port",
]

async def fetch_ip(session, proxy_address, attempt):
    # aiohttp 直接使用 'proxy' 参数
    async with session.get("https://httpbin.io/ip", proxy=proxy_address) as response:
        json_response = await response.json()
        print(f"尝试 {attempt} 的 IP: {json_response.get('origin', '未知')}")

async def main():
    async with aiohttp.ClientSession() as session:
        tasks = []
        num_requests = 6
        for i in range(num_requests):
            # 使用模运算符轮换代理
            proxy_address = proxies_list[i % len(proxies_list)]
            tasks.append(fetch_ip(session, proxy_address, i + 1))
        await asyncio.gather(*tasks)

# 启动脚本
# asyncio.run(main())

3. 使用 Scrapy 进行轮换

Scrapy 是一个强大的爬虫框架,通常使用中间件进行轮换。虽然可以编写自定义中间件,但流行的 scrapy-rotating-proxies 包简化了这一过程。

settings.py 中:

python Copy
DOWNLOADER_MIDDLEWARES = {
    "rotating_proxies.middlewares.RotatingProxyMiddleware": 610,
    "rotating_proxies.middlewares.BanDetectionMiddleware": 620,
}

# 用于轮换的代理列表
ROTATING_PROXY_LIST = [
    ...
]

"http://user:pass@ip1:port",
"http://user:pass@ip2:port",
# ...
]

Copy
## 手动代理轮换的局限性

虽然上述方法提供了控制,但它们存在显著的局限性:

*   **手动管理:** 您必须不断地获取、验证和更新代理列表,这既耗时又容易出错。
*   **封禁处理:** 代码仅轮换IP;它并没有智能检测某个IP是否被封禁或暂时阻止,导致请求浪费。
*   **IP质量:** 轮换的成功完全依赖于您获得的IP的质量。低质量的IP会很快被封禁,使得您的轮换失去效用。

## 推荐解决方案:Scrapeless代理

对于专业和业务关键数据工作流程,完全管理的代理解决方案远比手动管理更高效。**Scrapeless代理**在服务器端处理整个轮换过程,允许您在Python代码中使用单个端点,同时受益于一个庞大且持续管理的IP池。

Scrapeless提供了一个全球代理网络,包括住宅代理、静态ISP代理、数据中心代理和IPv6代理,拥有**超过9000万个IP**,成功率高达**99.98%**。它支持广泛的用例——从网络爬虫和市场研究到价格监控、**SEO跟踪**、广告验证和品牌保护——使其成为业务和专业数据工作流程的理想选择。

<div style="padding: 20px 0; text-align: center;">
  <a
    style="
      margin: 8px;
      display: inline-block;
      text-decoration: none;
    "
    href="https://www.goproxy.com/register?link=https://app.scrapeless.com/passport/login?utm_source=official&utm_medium=blog&utm_campaign=rotate-proxies-in-python"
  >
    <div
      style="
        font-weight: bold;
        width: 100%;
        max_width: 400px;
        padding: 12px 40px;
        background: #12A594;
        border-radius: 5px;
        border: 2px solid #12A594;
        color: #fff;
        cursor: pointer;
        box-sizing: border-box;
        font-size: 18px;
      "
    >
      免费试用 &gt;
    </div>
  </a>
</div>

### 住宅代理:Python的自动轮换

Scrapeless住宅代理是Python爬虫的最有效解决方案,因为它们自动处理复杂的轮换逻辑。

**主要特点:**

*   **自动代理轮换** (服务器端管理)
*   99.98%的平均成功率
*   精确的地理定位 (国家/城市)
*   HTTP/HTTPS/SOCKS5协议
*   <0.5秒的响应时间
*   仅需 **$1.80/GB**

### 数据中心代理用于批量轮换

对于速度至关重要的批量爬虫任务,Scrapeless数据中心代理提供高性能的轮换。

**特点:**

*   99.99%的正常运行时间
*   极快的响应时间
*   稳定的长时间会话
*   API访问和简单集成
*   支持HTTP/HTTPS/SOCKS5

**Scrapeless代理**提供全球覆盖、透明度和高度稳定的性能,使其成为比其他替代方案更强大和可信赖的选择——尤其对于需要无缝、无封禁的**通用爬虫**和**产品解决方案**的业务关键和专业数据应用。

## 结论

代理轮换是严肃的Python网络爬虫的不可谈判的要求。虽然手动轮换提供了细粒度的控制,但像Scrapeless代理这样的管理解决方案提供了更可靠的IP质量和操作简便性。通过集成高质量的代理服务,您可以确保您的Python脚本在面对不断演变的反爬虫技术时保持高效、匿名和成功。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录