🥳Scrapeless コミュニティ に参加し、無料トライアルを請求して、強力な Web スクレイピング ツールキットにアクセスしてください。
ブログに戻る

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

James Thompson
James Thompson

Scraping and Proxy Management Expert

18-Sep-2024

ウェブスクレイピング中にブロックされるのを避けるために、多くのIPアドレス間でHTTPリクエストをルーティングすることが重要です。そのため、このチュートリアルでは、Pyppeteerプロキシを作成する方法を学びます。

前提条件

ローカルシステムがPython 3.6以上を実行していることを確認してください。

次に、pipを使用して、以下の行を実行することでPyPIからPyppeteerをインストールします。

language Copy
pip install pyppeteer

継続的なウェブスクレイピングのブロックにうんざりしていませんか?

Scrapeless:利用可能な最高のオールインワンオンラインスクレイピングソリューション!

インテリジェントで高性能なプロキシローテーションを使用して、匿名性を保ち、IPベースのブロックを回避します。

無料でお試しください!

Pyppeteerをプロキシとして利用する方法

まず、ident.meから現在のIPアドレスを要求するスクリプトscraper.pyを作成します。

language Copy
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 Copy
python scraper.py

スクリプトを更新してPyppeteerプロキシを含める時がきました。そのためには、FreeProxyListから無料のプロキシを入手します(使用したプロキシを使用できない場合があります)。

scraper.pyスクリプトは、新しいブラウザインスタンスを開き、特定のパラメータを渡すことができるlaunch()関数を使用します。--proxy-serverパラメータを設定して、ブラウザにPyppeteerリクエストをプロキシ経由でルーティングするように指示します。選択肢の1つはargsで、これはブラウザプロセスに送信する追加の引数のリストです。

language Copy
# ...
async def main():
    # ヘッドレスブラウザインスタンスを新規作成
    browser = await launch(args=['--proxy-server=http://20.219.108.109:8080'])
    # 新しいページを作成
    page = await browser.newPage()
# ...

これがコード全体です。

language Copy
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 Copy
20.219.108.109

プロキシ経由でのPyppeteer認証

プレミアムプロキシを使用する場合は、認証にユーザー名とパスワードが必要です。そのためには、--proxy-authパラメータを使用します。

language Copy
# ...
    # ヘッドレスブラウザインスタンスを新規作成
    browser = await launch(args=[
        '--proxy-server=http://20.219.108.109:8080'
        '--proxy-auth=<YOUR_USERNAME>:<YOUR_PASSWORD>'
        ])
# ...

代わりに、以下のようにページAPIを使用して認証することもできます。

language Copy
# ...
    # 新しいページを作成
    page = await browser.newPage()
    await page.authenticate({ 'username': '<YOUR_USERNAME>', 'password': '<YOUR_PASSWORD>' })
# ...

Pyppeteerを使用して動的プロキシを構成する

ブラックリストに登録されるのを防ぐには、以前に使用した静的プロキシではなく、ウェブスクレイピングに動的プロキシを使用する必要があります。Pyppeteerを使用すると、それぞれがユニークなプロキシ設定で構成された、多数のブラウザインスタンスを作成できます。

まず、追加の無料プロキシを取得し、それらのリストをコンパイルします。

language Copy
# ...
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 Copy
# ...
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 Copy
# ...
async def main():
    for i in range(3):
        await init_pyppeteer_proxy_request(random.choice(proxies))
# ...

現在のコードは以下のようになります。

language Copy
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 Copy
pip install requests

スクレーパーが実行されると、OpenSeaのHTMLページがスクラップされ、コンソールに表示されます。

まとめ

Pyppeteerでプロキシを使用すると、ウェブスクレイピングの成功率を大幅に向上させることができます。また、静的プロキシと動的プロキシの両方を使用してリクエストを送信する方法を学びました。

また、別のツールがより迅速かつ正確にタスクを完了できることも発見しました。Scrapelessのウェブスクレイピングツールは、インフラストラクチャを心配することなく大規模にスクラップする必要がある場合、必要なデータを取得できるという確信が得られるため、あなたの味方になるかもしれません。

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

最も人気のある記事

カタログ