コンテンツにスキップ

Python リクエストでプロキシを使用するための完全ガイド

Python スクレーパーまたはクローラーを作成している場合は、プロキシ サポートの構成をリストの上位に置く必要があります。プロキシを使用すると、リクエストを中間サーバー経由でルーティングし、実際の場所を隠すことができます。これにより、ブロックされずにサイトを大規模にスクレイピングしたり、特定の地域に限定されたコンテンツにアクセスしたりするなど、多くの可能性が開かれます。

この包括的なガイドでは、Python のリクエスト モジュールでプロキシを使用するために知っておくべきことをすべて説明します。プロキシが役立つ理由、プロキシの仕組み、入手先、認証とセキュリティのベスト プラクティス、プロキシ ローテーションの実装方法について説明します。フォローしてください。あなたをプロキシのプロにしてあげましょう!

Python スクレイパーにプロキシが不可欠な理由

まず、Python スクレイパーにとってプロキシが非常に重要である理由を見てみましょう。

スクレイピング時にブロックされないようにする

Python リクエストでプロキシを使用する最大の理由は、IP 禁止を回避することです。多くのサイトには、スクレイパーやボットをブロックするための保護機能が設けられています。ブラックリストに登録する前に、特定の IP からの 1 分あたり一定数のリクエストを許可する場合があります。

プロキシ サーバーのローテーション プールからスクレイピングすると、さまざまなユーザーのように見えます。単一の住宅用 IP からスクレイピングする場合と比較して、サイトはユーザーを検出してブロックするのが難しくなります。

スケール感を与えるために、サイトでは、禁止がトリガーされる前に、IP ごとに 60 分あたり 100 ~ XNUMX 件のリクエストを許可する場合があります。ほんの一握りのプロキシでも、スクレイピング能力を簡単に XNUMX 倍にすることができます。プロキシによりスケーラビリティが可能になります。

地理的に制限されたコンテンツへのアクセス

プロキシのもう 1 つの利点は、特定の地域に限定されたコンテンツにアクセスできることです。たとえば、BBC iPlayer ビデオ ストリーミング サービスは英国居住者のみが利用できます。トラフィックを英国のプロキシ経由でルーティングすることで、ロンドンにいるかのようにサイトを表示できます。

他の著名な例としては、Hulu (米国のみ)、Channel 4 (英国)、NHK World (日本) などがあります。プロキシを使用すると、地域が制限されたコンテンツにどこからでもアクセスできるオプションが提供されます。

匿名性とセキュリティ

実際の IP アドレスを隠すことで、スクレイピング中のプライバシーも強化されます。サイトは、リクエストを簡単に追跡してあなたの場所や身元を特定することはできません。

攻撃者はプロキシを利用して攻撃を隠すこともありますが、それはここでは扱いません。 Web スクレイピングのプライバシーと匿名性の強化による利点に焦点を当てます。

スケールパイソンスクレーパー

プロキシを使用すると、単一のレジデンシャル IP の容量に制限されないため、より多くの並列リクエストを行うことができます。

スレッド制限に達したり、単一の IP でブロックされたりするのではなく、複数のプロキシ経由でリクエストをルーティングして、1 分あたりに実行できるリクエストの数を増やすことができます。

各プロキシが 60 リクエスト/分を許可する場合、4 つのプロキシにより 240 リクエスト/分の容量が得られます。 10 個のプロキシは 600 リクエスト/分まで拡張できます。プロキシは、Python で分散型の大容量スクレイパーを構築するために不可欠です。

プロキシがなぜ役立つのかがわかったので、次にプロキシがどのように機能するかを詳しく見てみましょう。

プロキシの仕組み: リクエストの匿名化

プロキシは、ユーザーと宛先サーバーの間のリクエストの仲介者として機能します。

プロキシの仕組み

IP からターゲット サイトに直接接続する代わりに、リクエストは最初にプロキシ サーバー経由でルーティングされます。これにより、実際の IP が宛先からマスクされます。

これは、自分の IP アドレスの代わりにプロキシの IP アドレスを使用するように HTTP リクエストを構成することで機能します。 Python でこれを構成する方法については、後で詳しく説明します。

プロキシがどのように機能するかに関するいくつかの重要な注意事項:

  • プロキシには、トラフィックの送信元と思われる独自の一意の IP があります。 これにより、実際の IP が非表示になり、プロキシの IP に置き換えられます。

  • プロキシを連鎖させて匿名性を高めることができます。 トラフィックを複数のプロキシ経由でルーティングして、発信元をさらに難読化できます。

  • HTTP や SOCKS 通過するトラフィックを処理します。 これは、リクエストのアプリケーション層で構成されます。

プロキシが基本的なレベルでどのように機能するかを理解したところで、利用可能なさまざまな種類のプロキシについて見てみましょう。

HTTP と SOCKS プロキシ

2 つの主要なプロキシ プロトコルは HTTP と SOCKS。それらを比較してみましょう:

HTTPプロキシ

HTTP プロキシは、最も一般的なタイプです。いくつかの主要な属性:

  • HTTP/HTTPS トラフィックでのみ機能します (下位レベルの TCP/UDP ではありません)
  • セットアップが簡単 – ほとんどのライブラリおよびツールと互換性があります
  • 通常、Web スクレイピングと一般的な Web アクセスに使用されます。

HTTP プロキシは基本的に、クライアントによって行われた HTTP リクエストをインターセプトし、宛先に転送します。 HTTP トラフィックのみに制限されます。

SOCKS プロキシ

SOCKS は、下位ネットワーク層で動作する、よりフル機能のプロキシ プロトコルです。

いくつかの機能:

  • あらゆる TCP トラフィックに対応、HTTP、HTTPS、FTP などを含みます。
  • 認証およびセキュリティ機能の追加 ユーザー名/パスワード認証など。
  • 通常、完全なネットワーク アクセスと匿名性のために使用されます。

HTTP プロキシはアプリケーション レベルでのみ動作しますが、 SOCKS ネットワーク/トランスポート層の下位に位置します。これにより、 SOCKS ほとんどすべての TCP トラフィックをプロキシします。

どれを使用するべきですか?

ほとんどの Web スクレイピングの使用例では、HTTP プロキシで十分です。セットアップが簡単で、プロキシ経由で HTTP リクエストを送信することだけを気にする必要があります。

HTTP を超える下位レベルのトラフィックに対して完全なネットワーク アクセス ルーティングが必要な場合は、次を使用します。 SOCKS を代わりにお使いください。 SOCKS セキュリティの強化を優先し、認証が必要な場合にも、この方法が適しています。

Python Web スクレイパーに重点を置いた用途には、HTTP プロキシが最適です。次に、プロキシ サーバーをどこで入手できるかを見てみましょう。

Webスクレイピング用のプロキシを入手できる場所

Python リクエストで使用するプロキシを取得するには、主な方法がいくつかあります。

1. プロキシプロバイダーからプロキシを購入する

最も簡単な方法は、プロキシ サービスからプロキシを購入することです。トッププロバイダーには次のようなものがあります。

  • ブライトデータ – 世界中で高品質の住宅用 IP を提供する、全体的に私のお気に入りのプロバイダーです。高速接続と信頼性の高い稼働時間。

  • オキシラブ – 大容量をサポートするために、すべてのリージョンでデータセンター プロキシを利用できます。お手頃な価格設定。

  • ジオサーフ – 地理的に制限されたコンテンツにアクセスするための、特定の国向けの住宅用プロキシに特化しています。

プロバイダーの品質と場所に応じて、プロキシごとに月額約 1 ~ 5 ドルの支払いが発生することが予想されます。プロキシ サービス API を使用すると、新しいプロキシのリストをロードしてコードに統合することが簡単になります。

2. 公開されているプロキシを見つける

オンラインで無料で利用できるパブリック プロキシを見つけることもできます。これらは共有されているため、低品質であることに注意してください。パブリック プロキシは使用率が高く、オフラインになることがよくあります。

パブリック プロキシを見つけるのに役立つ場所:

パブリック プロキシのみに依存することはお勧めしませんが、いざという場合に有料プロキシを補強することはできます。稼働時間や速度が低下することが予想されます。

3. 独自のプロキシを展開する

住宅用のローテーション IP、クラウド インスタンス、VPN などのインフラストラクチャにプロキシ サーバーを展開することで、独自のプライベート プロキシを作成することもできます。

これにより制御が可能になりますが、プロキシ サーバーの構成と維持にはより多くの労力が必要になります。通常は、簡略化するために、代わりにプロキシ プロビジョニングをプロバイダーにアウトソーシングします。

要約すると、予算が大幅に制限されている場合を除き、BrightData などの信頼できるプロバイダーからプロキシを購入することをお勧めします。信頼性と品質は、扱いにくいパブリック プロキシを扱うよりも優れています。

次に、コードを詳しく見て、プロキシを使用して Python リクエストを構成する方法を見てみましょう。

プロキシの設定 – Python リクエストの例

Python リクエストを使用すると、トラフィックをプロキシ サーバー経由で簡単に送信できます。

プロキシを指定するには、 proxies URL スキームをプロキシ URL にマップする辞書:

proxies = {
  ‘http‘: ‘http://10.10.1.10:3128‘,
  ‘https‘: ‘http://10.10.1.10:1080‘ 
}

次に、リクエストを行うときにこのプロキシ辞書を渡します。

response = requests.get(‘https://example.com‘, proxies=proxies)

これにより、すべての HTTP および HTTPS リクエストが指定されたプロキシ経由でルーティングされます。

すべてのリクエストに対してグローバルに、またはリクエストごとにプロキシを設定することもできます。 Python リクエストを使用したさまざまなプロキシ構成の例を見てみましょう。

すべてのリクエストのグローバル プロキシ

リクエスト セッションを通じて行われたすべてのリクエストにプロキシをグローバルに適用するには、セッション レベルでプロキシ dict を設定します。

import requests

session = requests.Session() 

proxies = {
  ‘http‘: ‘http://10.10.1.10:3128‘,
  ‘https‘: ‘http://10.10.1.10:1080‘  
}

session.proxies = proxies

response = session.get(‘https://example.com‘) 
# Uses HTTP proxy http://10.10.1.10:3128

環境変数を設定してこれを行うこともできます HTTP_PROXY および HTTPS_PROXY スクリプトを実行する前に。

リクエストごとのプロキシ

特定のリクエストにのみプロキシを使用するには、その呼び出し専用のパラメータとしてプロキシ辞書を渡します。

import requests 

response = requests.get(‘https://example.com‘) # no proxy

proxied_response = requests.get(‘https://example.com‘, proxies={
  ‘http‘: ‘http://10.10.1.10:3128‘,
  ‘https‘: ‘http://10.10.1.10:1080‘ 
}) # uses proxy

これにより、この 1 つのリクエストに対してのみグローバル プロキシがオーバーライドされます。

特定のドメインのプロキシ

特定のドメインのトラフィックのみをプロキシするには、プロキシ辞書でドメインを指定します。

proxies = {
   ‘http://scrape-site.com‘: ‘http://10.10.1.10:3128‘,
   ‘https://api.example.com‘: ‘http://10.10.1.10:1080‘, 
}

requests.get(‘http://scrape-site.com/‘, proxies=proxies) # uses proxy
requests.get(‘http://no-proxy-domain.com‘, proxies=proxies) # no proxy

これにより、プロキシを使用するサイトと使用しないサイトを詳細に制御できます。

プロキシを適用する方法がわかったので、次はプロキシを使用して認証する方法について説明します。

プロキシによる認証

多くのプロキシを使用するには認証が必要です。これには、プロキシ URL でユーザー名とパスワードの資格情報を渡すことが含まれます。

認証を伴う HTTP プロキシ URL の例を次に示します。

http://myusername:[email protected]:8080

非常に簡単ですが、ユーザー名またはパスワードに特殊文字が含まれている場合は、特別な考慮事項があります。

多くの特殊文字 @ および : 基本的な URL 構文では無効です。これらのケースに対処するには、次のことを行う必要があります。 URLエンコード の資格情報 urllib としょうかん:

from urllib.parse import quote

username = ‘[email protected]‘
password = ‘pass#123‘

proxy_url = f‘http://{quote(username)}:{quote(password)}@123.45.6.7:8080‘

これにより、それらの値が適切にエンコードされ、URL に渡すことができるようになります。

これで、資格情報に特殊文字を含めることができ、正常に認証できるようになります。

これを踏まえて、ローテーション プロキシについて説明しましょう…

禁止を回避するためにプロキシをローテーションする

Web サイトをスクレイピングするときは、複数のプロキシ IP 間でリクエストをローテーションする必要があります。これにより、単一の IP からのリクエストが多すぎるためにサイトから禁止されるのを防ぐことができます。

Python でプロキシ ローテーションを実装する 1 つの方法は次のとおりです。

import requests 
from random import choice

proxy_list = [
  ‘http://123.45.6.7:8080‘,
  ‘http://98.76.54.3.2:8080‘,
  ‘http://103.47.99.2:8080‘  
]

for _ in range(10):

  proxy = choice(proxy_list)

  response = requests.get(‘https://example.com‘, proxies={
      ‘http‘: proxy,
      ‘https‘: proxy
  })

  # Do something with response...

当社はプロキシ URL のリストを管理しています。各リクエストの前に、Python を使用してプロキシをランダムに選択します。 random.choice()。これにより、リクエストごとにプロキシがローテーションされます。

ファイル、プロキシ API、データベース、またはその他のソースからプロキシのリストをロードできます。古いプロキシが故障した場合は、定期的に更新して新しいプロキシを循環させます。

安全のために、少なくとも 10 個以上のプロキシを使用し、少なくとも 100 リクエストごとにプロキシを変更するのが理想的です。多ければ多いほど良いです。

目立たないようにするために、本番スクレイパーにも同様のプロキシ ローテーションを必ず実装してください。

Python リクエストによるプロキシに関する最終的な考え方

これで、Python のリクエスト モジュールでプロキシを使用するための包括的なガイドが完成しました。

Python Web スクレイパーのプロキシの重要性、プロキシが内部でどのように機能するか、プロキシを取得する場所、プロキシを使用するリクエストの構成方法、認証、およびプロキシ ローテーション パターンについて説明しました。

プロキシは、サイトを大規模にスクレイピングして IP 禁止を回避するために不可欠です。ここで説明するテクニックを使用すると、プロのようにプロキシを活用できます。

さらに高度なプロキシの使用方法については、次を参照してください。 ドキュメントを要求する。さあ、新しく見つけたプロキシの力を有効に活用してください!他に代理に関する質問がある場合はお知らせください。

参加する

あなたのメールアドレスは公開されません。 必須フィールドは、マークされています *