HTTPXとScrapelessプロキシの使用方法:完全ガイド
Expert Network Defense Engineer
今日は、HTTPXを使用してプロキシを利用する方法を学びます。プロキシは、スクレーパーとスクレイピングしたいサイトの間に位置します。スクレーパーは、ターゲットサイトに対してプロキシサーバーにリクエストを送信します。プロキシはターゲットサイトを取得し、それをスクレーパーに返します。
認証されていないプロキシの使用方法
要約すると、すべてのリクエストはproxy_urlに送られます。以下は、認証されていないプロキシを使用した例です。これは、ユーザー名やパスワードを使用していないことを意味します。
python
import httpx
proxy_url = "http://localhost:8030"
with httpx.Client(proxy=proxy_url) as client:
ip_info = client.get("https://geo.brdtest.com/mygeo.json")
print(ip_info.text)
認証されたプロキシの使用方法
プロキシがユーザー名とパスワードを必要とする場合、それは「認証された」プロキシと呼ばれます。これらの認証情報は、あなたのアカウントを認証し、プロキシへの接続を提供するために使用されます。
認証を使用すると、proxy_urlは次のようになります:http://<username>:<password>@<proxy_url>:<port_number>。以下の例では、zoneとusernameの両方を使用して、認証文字列のユーザー部分を作成します。
基盤接続にはScrapelessの住宅プロキシを使用しています。
python
import httpx
username = "your-username"
zone = "your-zone-name"
password = "your-password"
proxy_url = f"http://scrapeless-customer-{username}-zone-{zone}:{password}@scrapeless.proxy.io:33335"
ip_info = httpx.get("https://geo.brdtest.com/mygeo.json", proxy=proxy_url)
print(ip_info.text)
上記のコードは非常にシンプルです。これは、設定したいプロキシの基本です。
- 最初に、設定変数
username、zone、およびpasswordを作成します。 - それを使って
proxy_urlを作成します:f"http://scrapeless-customer-{username}-zone-{zone}:{password}@scrapeless.proxy.io:33335"。 - APIにリクエストを送信して、プロキシ接続に関する一般情報を取得します。
あなたの応答は次のようになります:
json
{"country":"US","asn":{"asnum":20473,"org_name":"AS-VULTR"},"geo":{"city":"","region":"","region_name":"","postal_code":"","latitude":37.751,"longitude":-97.822,"tz":"America/Chicago"}}
ローテーションプロキシの使用方法
ローテーションプロキシを使用すると、プロキシのリストを作成し、そこからランダムに選択します。以下のコードでは、countriesのリストを作成します。リクエストを行うときは、random.choice()を使用してリストからランダムな国を利用します。proxy_urlは国に合わせてフォーマットされます。
以下の例では、小さなローテーションプロキシのリストを作成します。
python
import httpx
import asyncio
import random
countries = ["us", "gb", "au", "ca"]
username = "your-username"
proxy_url = "scrapeless.proxy.io:33335"
datacenter_zone = "your-zone"
datacenter_pass = "your-password"
for random_proxy in countries:
print("----------connection info-------------")
datacenter_proxy = f"http://scrapeless-customer-{username}-zone-{datacenter_zone}-country-{random.choice(countries)}:{datacenter_pass}@{proxy_url}"
ip_info = httpx.get("https://geo.brdtest.com/mygeo.json", proxy=datacenter_proxy)
print(ip_info.text)
この例は、最初のものとそれほど違いはありません。主な違いは以下の通りです:
- 国の配列を作成します:
["us", "gb", "au", "ca"]。 - 単一のリクエストを行う代わりに、複数のリクエストを行います。リクエストを作成するたびに、
random.choice(countries)を使用してランダムな国を選択します。
フォールバックプロキシ接続の作成方法
上記の例では、データセンターと無料プロキシのみを使用しました。無料プロキシはあまり信頼性がありません。データセンタープロキシは、より難易度の高いサイトでブロックされることがよくあります。
この例では、safe_get()という関数を作成します。この関数を呼び出すと、最初にデータセンター接続を使用してURLを取得しようとします。これが失敗した場合、住宅接続にフォールバックします。
python
import httpx
from bs4 import BeautifulSoup
import asyncio
country = "us"
username = "your-username"
proxy_url = "scrapeless.proxy.io:33335"
datacenter_zone = "datacenter_proxy1"
datacenter_pass = "datacenter-password"
residential_zone = "residential_proxy1"
residential_pass = "residential-password"
cert_path = "/home/path/to/scrapeless_proxy_ca/New SSL certificate - MUST BE USED WITH PORT 33335/Scrapeless SSL certificate (port 33335).crt"
datacenter_proxy = f"http://scrapeless-customer-{username}-zone-{datacenter_zone}-country-{country}:{datacenter_pass}@{proxy_url}"
residential_proxy = f"http://scrapeless-customer-{username}-zone-{residential_zone}-country-{country}:{residential_pass}@{proxy_url}"
async def safe_get(url: str):
async with httpx.AsyncClient(proxy=datacenter_proxy) as client:
print("trying with datacenter")
response = await client.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, "html.parser")
if not soup.select_one("form[action='/errors/validateCaptcha']"):
print("response successful")
戻り値はレスポンスです
print("レスポンスに失敗しました")
async with httpx.AsyncClient(proxy=residential_proxy, verify=cert_path) as client:
print("住宅用プロキシを使って試しています")
response = await client.get(url)
print("レスポンスは成功しました")
return response
async def main():
url = "https://www.amazon.com"
response = await safe_get(url)
with open("out.html", "w") as file:
file.write(response.text)
asyncio.run(main())
この例は、この記事で扱った他のものより少し複雑です。
- 現在、データセンター接続用と住宅用接続用の2セットの設定変数があります。
- 今回は、HTTPXのより高度な機能を導入するために、
AsyncClient()セッションを使用します。 - まず、
datacenter_proxyでリクエストを試みます。 - 適切なレスポンスを取得できない場合は、
residential_proxyを使用してリクエストを再試行します。また、コード内のverifyフラグに注意してください。Scrapelessの住宅用プロキシを使用する際は、SSL証明書をダウンロードして使用する必要があります。 - 信頼できるレスポンスを取得できたら、そのページをHTMLファイルに書き込みます。このページをブラウザで開くと、プロキシが実際にアクセスし、私たちに返したものを見ることができます。
上記のコードを試すと、出力と生成されるHTMLファイルは次のようになります:
データセンターを使って試している
レスポンスに失敗しました
住宅用プロキシを使って試しています
レスポンスは成功しました
Scrapelessプロキシが役立つ理由
この記事を通じて気づいたかもしれませんが、Scrapelessは現代のデータ収集ニーズに対応した包括的なプロキシソリューションを提供しています。195カ国以上にわたる9000万以上の住宅IPを持ち、成功率は99.98%に達し、ウェブスクレイピング、市場調査、価格監視、SEOトラッキング、広告検証、ブランド保護などの幅広いユースケースをサポートするScrapelessは、ビジネスやプロフェッショナルのデータワークフローに最適です。
住宅用プロキシ
195カ国以上にわたる9000万以上の実際の住宅IPを持つScrapeless住宅用プロキシは、スクレイピング、市場インテリジェンス、価格追跡などに最適です。
主な機能:
- 自動プロキシローテーション
- 平均成功率99.98%
- 正確な地理ターゲティング(国/都市)
- HTTP/HTTPS/SOCKS5プロトコル
- <0.5秒のレスポンスタイム
- 優れた速度と安定性
- 価格は**$1.80/GB**
IPv6プロキシ
重いスクレイピング作業向けに設計された高速専用IPv6プロキシです。
機能:
- HTTP(S)およびSOCKS5サポート
- 自動IPv6プロキシローテーション
- 専用IPによる高い匿名性
- 5000万以上のプレミアムIPv6プール
- CCPAおよびGDPR準拠
- GBごとの請求
データセンタープロキシ
大規模な自動化、大量スクレイピング、巨大な同時接続に最適化された高性能データセンターIPです。
機能:
- 稼働率99.99%
- 極めて高速なレスポンスタイム
- 安定した長期間のセッション
- APIアクセスと簡単な統合
- 高帯域幅、低遅延
- HTTP/HTTPS/SOCKS5をサポート
静的ISPプロキシ
eコマースアカウント操作(eBay、PayPal、Amazon)、長期的なアイデンティティの一貫性、低いブロックリスクに最適です。
機能:
- 実際の住宅IP
- 稼働率99.99%
- 高い受け入れ率と低い禁止リスク
- 地理的ターゲティング
- HTTP/HTTPS/SOCKS5プロトコル
結論
HTTPXとScrapelessプロキシを組み合わせることで、プライベートで効率的かつ信頼できるウェブスクレイピングの方法が得られます。プロキシをローテートする場合は、Pythonの組み込みのrandomライブラリを使用するだけで簡単です。データセンターと住宅用プロキシを組み合わせることで、ほとんどのブロックシステムを迂回する冗長な接続を構築できます。
学んだように、Scrapelessはウェブスクレイピングプロジェクトのための完全なパッケージを提供します。9000万以上のIP、99.98%の成功率、195カ国以上にわたるカバレッジを持つScrapelessは、ウェブスクレイピングや市場調査から価格監視、SEOトラッキング、広告検証、ブランド保護まで、すべてのデータ収集ニーズに応える理想的な選択です。
Scrapelessプロキシで無料トライアルを今日から始めましょう!
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



