2024年にプロキシを使ってPyppeteerを使用する方法

Scraping and Proxy Management Expert
ウェブスクレイピング中にブロックされるのを避けるために、多くのIPアドレス間でHTTPリクエストをルーティングすることが重要です。そのため、このチュートリアルでは、Pyppeteerプロキシを作成する方法を学びます。
前提条件
ローカルシステムがPython 3.6以上を実行していることを確認してください。
次に、pipを使用して、以下の行を実行することでPyPIからPyppeteerをインストールします。
language
pip install pyppeteer
継続的なウェブスクレイピングのブロックにうんざりしていませんか?
Scrapeless:利用可能な最高のオールインワンオンラインスクレイピングソリューション!
インテリジェントで高性能なプロキシローテーションを使用して、匿名性を保ち、IPベースのブロックを回避します。
無料でお試しください!
Pyppeteerをプロキシとして利用する方法
まず、ident.me
から現在のIPアドレスを要求するスクリプトscraper.py
を作成します。
language
import asyncio
from pyppeteer import launch
async def main():
# ヘッドレスブラウザインスタンスを新規作成
browser = await launch()
# 新しいページを作成
page = await browser.newPage()
# ターゲットウェブサイトに移動
await page.goto('https://ident.me')
# ボディ要素を選択
body = await page.querySelector('body')
# 選択した要素のテキストコンテンツを取得
content = await page.evaluate('(element) => element.textContent', body)
# 結果をダンプ
print(content)
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
ターゲットページのボディコンテンツを取得するには、スクリプトを実行します。
language
python scraper.py
スクリプトを更新してPyppeteerプロキシを含める時がきました。そのためには、FreeProxyListから無料のプロキシを入手します(使用したプロキシを使用できない場合があります)。
scraper.py
スクリプトは、新しいブラウザインスタンスを開き、特定のパラメータを渡すことができるlaunch()
関数を使用します。--proxy-server
パラメータを設定して、ブラウザにPyppeteerリクエストをプロキシ経由でルーティングするように指示します。選択肢の1つはargs
で、これはブラウザプロセスに送信する追加の引数のリストです。
language
# ...
async def main():
# ヘッドレスブラウザインスタンスを新規作成
browser = await launch(args=['--proxy-server=http://20.219.108.109:8080'])
# 新しいページを作成
page = await browser.newPage()
# ...
これがコード全体です。
language
import asyncio
from pyppeteer import launch
async def main():
# ヘッドレスブラウザインスタンスを新規作成
browser = await launch(args=['--proxy-server=http://20.219.108.109:8080'])
# 新しいページを作成
page = await browser.newPage()
# ターゲットウェブサイトに移動
await page.goto('https://ident.me')
# ボディ要素を選択
body = await page.querySelector('body')
# 選択した要素のテキストコンテンツを取得
content = await page.evaluate('(element) => element.textContent', body)
# 結果をダンプ
print(content)
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
今度は、コマンドラインオプションpython scraper.pyでスクリプトを再度実行すると、プロキシのIPアドレスが画面に表示されます。
language
20.219.108.109
プロキシ経由でのPyppeteer認証
プレミアムプロキシを使用する場合は、認証にユーザー名とパスワードが必要です。そのためには、--proxy-auth
パラメータを使用します。
language
# ...
# ヘッドレスブラウザインスタンスを新規作成
browser = await launch(args=[
'--proxy-server=http://20.219.108.109:8080'
'--proxy-auth=<YOUR_USERNAME>:<YOUR_PASSWORD>'
])
# ...
代わりに、以下のようにページAPIを使用して認証することもできます。
language
# ...
# 新しいページを作成
page = await browser.newPage()
await page.authenticate({ 'username': '<YOUR_USERNAME>', 'password': '<YOUR_PASSWORD>' })
# ...
Pyppeteerを使用して動的プロキシを構成する
ブラックリストに登録されるのを防ぐには、以前に使用した静的プロキシではなく、ウェブスクレイピングに動的プロキシを使用する必要があります。Pyppeteerを使用すると、それぞれがユニークなプロキシ設定で構成された、多数のブラウザインスタンスを作成できます。
まず、追加の無料プロキシを取得し、それらのリストをコンパイルします。
language
# ...
import random
proxies = [
'http://20.219.108.109:8080',
'http://210.22.77.94:9002',
'http://103.150.18.218:80',
]
# ...
次に、プロキシを引数として受け取る非同期関数を使用して、ident.me
へのPyppeteerリクエストを行う非同期関数を作成します。
language
# ...
async def init_pyppeteer_proxy_request(url):
# ヘッドレスブラウザインスタンスを新規作成
browser = await launch(args=[
f'--proxy-server={url}',
])
# 新しいページを作成
page = await browser.newPage()
# ターゲットウェブサイトに移動
await page.goto('https://ident.me')
# ボディ要素を選択
body = await page.querySelector('body')
# 選択した要素のテキストコンテンツを取得
content = await page.evaluate('(element) => element.textContent', body)
# 結果をダンプ
print(content)
await browser.close()
# ...
次に、main()
関数を変更して、新しく作成された関数をランダムに選択したプロキシ経由で呼び出すようにします。
language
# ...
async def main():
for i in range(3):
await init_pyppeteer_proxy_request(random.choice(proxies))
# ...
現在のコードは以下のようになります。
language
import asyncio
from pyppeteer import launch
import random
proxies = [
'http://20.219.108.109:8080',
'http://210.22.77.94:9002',
'http://103.150.18.218:80',
]
async def init_pyppeteer_proxy_request(url):
# ヘッドレスブラウザインスタンスを作成します
browser = await launch(args=[
f'--proxy-server={url}',
])
# 新しいページを作成します
page = await browser.newPage()
# ターゲットウェブサイトに移動します
await page.goto('https://ident.me')
# body要素を選択します
body = await page.querySelector('body')
# 選択した要素のテキストコンテンツを取得します
content = await page.evaluate('(element) => element.textContent', body)
# 結果を出力します
print(content)
await browser.close()
async def main():
for i in range(3):
await init_pyppeteer_proxy_request(random.choice(proxies))
asyncio.get_event_loop().run_until_complete(main())
Pythonスクレーパークラスを新しいファイルに配置した後に、Python Requests(またはその他のHTTPリクエストライブラリ)をインストールします。
language
pip install requests
スクレーパーが実行されると、OpenSeaのHTMLページがスクラップされ、コンソールに表示されます。
まとめ
Pyppeteerでプロキシを使用すると、ウェブスクレイピングの成功率を大幅に向上させることができます。また、静的プロキシと動的プロキシの両方を使用してリクエストを送信する方法を学びました。
また、別のツールがより迅速かつ正確にタスクを完了できることも発見しました。Scrapelessのウェブスクレイピングツールは、インフラストラクチャを心配することなく大規模にスクラップする必要がある場合、必要なデータを取得できるという確信が得られるため、あなたの味方になるかもしれません。
Scrapeless では、適用される法律、規制、および Web サイトのプライバシー ポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツはデモンストレーションのみを目的としており、違法または侵害的な活動には関与していません。 私たちは、このブログまたはサードパーティのリンクからの情報の使用についていかなる保証もせず、一切の責任を負いません。 スクレイピング活動を行う前に、法律顧問に相談し、対象となる Web サイトの利用規約を確認するか、必要な許可を取得してください。