🎯 カスタマイズ可能で検出回避型のクラウドブラウザ。自社開発のChromiumを搭載し、ウェブクローラーAIエージェント向けに設計されています。👉今すぐ試す
ブログに戻ります

Pythonでプロキシを回す方法:ウェブスクレイピングのための実用ガイド

Michael Lee
Michael Lee

Expert Network Defense Engineer

21-Nov-2025
html Copy
<div style="background-color: #f3f4f6; padding: 24px 40px; border-radius: 10px;">
  <strong style="font-size: 18px;">
    簡単にご覧ください
  </strong>
  <p style="margin-bottom: 24px;">
    Requests、AIOHTTP、およびScrapyを使用してPythonでプロキシローテーションをマスターし、IP禁止を克服し、Scrapeless Proxiesでウェブスクレイピングプロセスを効率化しましょう。
  </p>
  <div style="text-align: center; margin-top: 10px;">
    <a href="https://app.scrapeless.com/passport/login?utm_source=official&utm_medium=blog&utm_campaign=rotate-proxies-in-python" style="background: #12A594; color: #fff; padding: 10px 28px; border-radius: 38px; text-decoration: none; display: inline-block;">
      今すぐログイン - 無料トライアル
    </a>
  </div>
</div>

Pythonは、`requests`、`aiohttp`、および`Scrapy`のような強力なライブラリのおかげで、ウェブスクレイピングやデータ収集に最適な言語です。しかし、ボット対策がますます高度になるにつれて、大規模なスクレイピングのために単一のIPアドレスを維持することは、即座にIP禁止やブロックを招く原因となります。

**プロキシローテーション**は、リクエストをIPアドレスのプールに分散させて、スクレイピング活動を自然に見せ、検出を防ぐために使用される重要な技術です。このガイドでは、Pythonでのプロキシローテーションを実装するための実用的なコードベースのアプローチを提供し、Scrapeless Proxiesのようなフルマネージドソリューションを使用するメリットを強調します。

## プロキシローテーションとは何か、なぜ必要なのか?

**プロキシローテーション**は、ターゲットウェブサイトに対する各リクエスト(または設定されたリクエスト数の後)に使用されるIPアドレスを自動的に変更するプロセスです。

必要な理由は以下の通りです:

*   **IP禁止を防止する:** ターゲットサイトは、単一のIPからのリクエストの量と頻度を追跡します。ローテーションにより、単一のIPが過負荷になることを防ぎ、一時的または永久的な禁止を回避します。
*   **レート制限を回避する:** IPを循環させることで、自動化されたトラフィックを減速させるために設計されたサーバーサイドのレート制限を効果的に回避できます。
*   **匿名性を維持する:** 追跡に対して複雑さを追加し、それが**市場調査**や競争情報収集にとって重要です。

## Pythonでのプロキシローテーションの実装

プロキシをローテーションさせるための方法は、使用しているPythonライブラリによって異なります。以下は3つの一般的なアプローチです。

### 1. `requests`ライブラリを使用したローテーション

`requests`ライブラリは、単純なHTTPリクエストに最も人気のある選択肢です。ここでのローテーションは、プロキシのリストを維持し、各リクエストに対してランダムに1つを選択します。

```python
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 = [
ja Copy
"http://user:pass@ip1:port",
"http://user:pass@ip2:port",
# ...
]

手動プロキシローテーションの限界

上記の方法は制御を提供しますが、重大な限界があります:

  • 手動管理: プロキシのリストを常にソースして、検証し、更新する必要があり、時間がかかり、エラーが発生しやすいです。
  • 禁止処理: コードはIPを回転させるだけで、IPが禁止または一時的にブロックされているかを賢く検出しないため、リクエストが無駄になります。
  • IPの質: 回転の成功は、ソースしたIPの質によって完全に依存します。低品質のIPは迅速に禁止され、回転が効果を発揮しなくなります。

推奨ソリューション:Scrapeless Proxies

プロフェッショナルでビジネスクリティカルなデータワークフローには、完全管理のプロキシソリューションがはるかに効率的です。Scrapeless Proxiesは、サーバー側で完全に回転プロセスを処理し、Pythonコードで単一のエンドポイントを使用できるようにしながら、大規模で常に管理されたIPプールの利点を享受できます。

Scrapelessは、Residential、Static ISP、Datacenter、およびIPv6プロキシを含む世界的なプロキシネットワークを提供し、9,000万以上のIPへのアクセスと最大**99.98%**の成功率を誇ります。ウェブスクレイピングや市場調査から価格監視、SEO追跡、広告検証、ブランド保護まで、多様な用例をサポートしており、ビジネスおよびプロフェッショナルなデータワークフローの両方に理想的です。

Residential Proxies:Python用の自動回転

Scrapeless Residential Proxiesは、Pythonのスクレイピングに最も効果的な解決策であり、複雑な回転ロジックを自動的に処理します。

主な機能:

  • 自動プロキシ回転(サーバー側で管理)
  • 平均成功率99.98%
  • 正確なジオターゲティング(国/市)
  • HTTP/HTTPS/SOCKS5プロトコル
  • 0.5秒未満の応答時間
  • 料金は**$1.80/GB**

バルク回転用のDatacenter Proxies

スピードが最も重要なバルクスクレイピングタスクには、Scrapeless Datacenter Proxiesが高性能の回転を提供します。

機能:

  • 99.99%の稼働時間
  • 極めて速い応答時間
  • 安定した長時間セッション
  • APIアクセス & 簡単な統合
  • HTTP/HTTPS/SOCKS5をサポート

Scrapeless Proxiesは、グローバルなカバレッジ、透明性、そして非常に安定したパフォーマンスを提供し、他の選択肢よりも優れた信頼性を持つ選択肢となります。特に、シームレスでブロックフリーなユニバーサルスクレイピングおよびプロダクトソリューションが求められるビジネスクリティカルおよびプロフェッショナルなデータアプリケーションには最適です。

結論

プロキシ回転は、真剣なPythonウェブスクレイピングにとって交渉の余地のない要件です。手動回転は詳細な制御を提供しますが、Scrapeless Proxiesのような管理ソリューションは、IPの質、運用のシンプルさ、そして優れた信頼性を提供します。高品質のプロキシサービスを統合することで、Pythonスクリプトが効率的、匿名で、進化する対ボット技術に対抗して成功を収めることを保証できます。


参考文献

[1] Python Requests Documentation: Proxies
[2] AIOHTTP Documentation: Proxy Support
[3] Scrapy Documentation: Downloader Middleware
[4] W3C: HTTP/1.1 Method Definitions (GET)
[5] IETF: Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing

Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。

最も人気のある記事

カタログ