darkproxyscrape ロゴ

How To Use Proxies To Rotate IP Addresses In Python? 5 Easy Steps In 2024

ハウツー, プロキシ, パイソン, 11月02日-2022年5分で読める

目次

プロキシを使用する場合、対象のサーバーに直接接続するのではなく、リクエストをプロキシサーバーに送り、プロキシサーバーがリクエストを評価して応答を返します。プロキシには、実際のIPアドレスを隠したり、フィルターや検閲を回避したりなど、多くの利点があります。 

同じIPアドレスから複数のリクエストを送信するため、高度なウェブスクレイピングを行うことが困難な場合がある。ウェブスクレイパーは、スクレイピングするウェブサイトからブロックされるという共通の問題に直面する。しかし、ブロックされないようにするために、以下のような多くのテクニックを使うことができる。
  • IPアドレスのローテーション
  • ヘッドレス・ブラウザの使用
  • クロール率を下げる、
  • プロキシの使用

プロキシローテーターは、ほとんどのスクレイピング対策を回避するのに役立ちます。また、ターゲットのウェブサイトで実装されているレート制限を回避し、データをうまく抽出するために使用することもできます。しかし、ローテーションプロキシとは何ですか?プロキシプールからの接続ごとに新しいIPアドレスを割り当てるプロキシである。つまり、スクリプトを起動して1000の異なるIPアドレスを取得することで、任意の数のウェブサイトに1000のリクエストを送ることができる。

この記事は、pythonでIPアドレスをローテーションするためにプロキシを使用する方法を理解するのに役立ちます。

Pythonでプロキシを使ってIPアドレスをローテーションする方法

無料のプロキシのリストをスクレイピングして、list_proxy.txtという名前のテキストファイルに保存することができます。その後、以下の手順に従ってPythonでIPアドレスをローテーションすることができます。

ライブラリのインポート

以下のコマンドを使ってPythonのrequestsモジュールをインポートする必要があります。

輸入リクエスト

このモジュールがインストールされていない場合は、以下のコマンドでインストールできます。

pipinstallrequests

関数の作成

sessionとproxyの2つのパラメータを取るsend_request関数を作成する必要があります。ほとんどのフリーのプロキシはHTTPSプロトコルを使用しないので、HTTPプロキシを使用するのが良いでしょう。ほとんどのフリーのプロキシはブロックリストに登録されているため動作しないので、try-exceptブロックを使用します。
def send_request(session, proxy):
   try:
       response = session.get('http://httpbin.org/ip', proxies={'http': f"http://{proxy}"})
       print(response.json())
   except:
       pass

.txtファイルを読む

ここからがコードのメインセクションです。以下のように、list_proxy.txtファイルを読み込んでproxiesという変数に保存しなければならない。

if__name__ =="__main__"with open('list_proxy.txt','r')as file:
       プロキシ =file.readlines()

Forループを使う

Pythonでセッションを作成するにはrequestsモジュールを使う必要があります。下のコードでは for ループを使ってプロキシをループしています。そしてsend_request関数にセッションとプロキシを渡します。 

withrequests.Session()assession:
  forproxyinproxies:
       send_request(session, proxy)

スクリプトの実行

スクリプトを実行し、以下のような出力を見ることができる。プロキシの長いリストが表示されますが、これらは動作しないことを覚えておいてください。 

pythonrotateproxy.py

あなたのコード全体は次のようになる:

import requests


def send_request(session, proxy):
   try:
       response = session.get('http://httpbin.org/ip', proxies={'http': f"http://{proxy}"})
       print(response.json())
   except:
       pass


if __name__ == "__main__":
   with open('list_proxy.txt', 'r') as file:
       proxies = file.readlines()

   with requests.Session() as session:
       for proxy in proxies:
           send_request(session, proxy)

プロキシ・ローテーター構築のヒント

Pythonで回転プロキシを使う場合のヒントを以下に示す。

信頼できる無料のプロキシサービスを利用する

利用可能な無料プロキシサービスのほとんどは混雑しており、予期せぬクラッシュやイライラさせる遅延につながる。そのため、無料プロキシを利用する際には、それらがあなたのスクレイピングニーズにマッチしているかどうか、また、重大なドローダウンを引き起こさないかどうかを確認する必要があります。

ほとんどの無料プロキシは有効期間が限られているので、Pythonで独自のロジックを構築して、無料プロキシリストのローテーターを稼働中のIPアドレスで回転させることができます。こうすることで、ウェブスクレイピング中に中断されることがなくなります。 

予測可能なプロキシIPアドレスの使用を控える

特定のシーケンスや、同じグループに属するような予測可能なフォーマットに従ったIPアドレスの使用は避けなければならない。ほとんどのアンチスクレイピング・ツールは、そのようなIPアドレスから送信されたリクエストを簡単に検知してしまうからだ。例えば、次のような一連のローテーションIPアドレスの使用は、すぐにレッドフラグが立ってしまうので避けるべきです。

103.243.132.11

103.243.132.12

103.243.132.13

103.243.132.14

プレミアムプロキシサービスを検討する

無料のプロキシIPローテータは安全でなく、速度も遅い。そのため、高度で大規模なウェブスクレイピングプロジェクトを実行する場合、それらを使用することは適していません。優れたプレミアムプロキシを使用すると、高品質のサービスを得ることができ、ブロックや中断を経験することなく、何千ものWebページをスクレイピングすることができます。 

プレミアムプロキシサービスを利用するには、数ドルを支払い、データ抽出のニーズを満たし、プライバシーを保証してくれるプロバイダーを手に入れなければならない。

エリート・プロキシ

以下に、インターネット上のプロキシの3つの主なカテゴリーを示す。

  • エリート・プロキシ
  • 匿名プロキシ
  • 透明なプロキシ
エリートプロキシは、検知を防ぎ、制限を回避することができるので、これらのプロキシの中で考慮すべき最良の選択肢です。エリートプロキシを使って REMOTE_ADDRヘッダだけを送信し、他のヘッダは空にしておくことができます。このようにして、これらのプロキシで最適なプライバシーを達成することができます。
一方、透過プロキシはあなたのIPアドレスの詳細を明らかにし、HTTP_VIAヘッダーとHTTP_X_FORWARDED_FORヘッダーを介してあなたの実際のIPを送信します。匿名プロキシはあなたの実際のIPアドレスを公開しない。プロキシのIPを送信するか、空のままにします。

IPローテーションとユーザーエージェントローテーションの組み合わせ

IPローテーションを使えば、複数のIPアドレスをローテーションさせ、検知を回避することができる。しかし、スクレイピング対策によっては、そのような行為を特定し、データの採取をブロックすることができます。したがって、成功の可能性を高めるためには、IPアドレスのローテーションとは別に、ユーザーエージェントのローテーションも行う必要があります。 

よくある質問

1. How to use proxies to rotate IP addresses using python?
pythonライブラリのリクエストの助けを借りて、簡単にプロキシをローテートすることができます。まず、ProxyScrapeのウェブサイトから無料プロキシのリストをダウンロードします。次に、IPローテーションプロセス全体を実行するために使用できる関数を作成します。3番目に、ダウンロードした無料プロキシを読み込むために read 関数を使用します。最後に、セッションで使用可能なプロキシを取得するために for ループを使用してスクリプトを実行します。
2. Is there a proxy rotator available online?
はい、オンラインで利用可能なプロキシローテータがあります。データセンターのプロキシを手動でローテートする代わりに、これらのプロキシローテータを使って重い仕事をすることができる。しかし、これらは有料のサービスです。もし無料のプロキシローテータが欲しければ、pythonの助けを借りてローテータを構築するのが最良のチャンスです。
3. How do proxies help in web scraping?
プロキシは、あなたの元のIPアドレスを隠し、そのIPアドレスを使ってターゲットサーバーに複数のリクエストを送信し、必要な情報を取得するのに役立ちます。ウェブスクレイピングの場合、多くのリクエストを素早く送信する必要がありますが、ターゲットサーバーはこれを異常な行動とみなし、あなたのIPアドレスをブロックしてしまう可能性があります。プロキシはこのようなシナリオを回避するのに役立ちます。

結論

Pythonでプロキシ・ローテーターを作るのは簡単だ。ランダムなプロキシを生成し、ウェブサイトからデータをスクレイピングするロジックを構築することができる。 データセンターと レジデンシャルプロキシ以外に、エリートプロキシ、匿名プロキシ、透過プロキシがあります。エリートプロキシは、ターゲットウェブサイトに検出されにくいため、最良の選択肢です。匿名プロキシはインターネット上でプライバシーを守りたい場合に使用できます。最後に、透明プロキシを使用することができますが、成功する可能性は最も低いです。この記事では、pythonでIPアドレスをローテーションするためにプロキシを使用する方法について、簡単なコーディングステップで詳細な情報を提供し、例を挙げたいと思います。