Skip to content
advanced

Продвинутый веб-скрапинг с ротационными резидентными прокси Dataimpulse и Playwright

Узнайте, как интегрировать ротационные резидентные прокси Dataimpulse с Playwright, чтобы построить отказоустойчивый крупномасштабный конвейер веб-скрапинга, который обрабатывает динамический контент и меры против ботов.

Linux HTTP(S) Веб-скрейпинг

Обзор

Dataimpulse предоставляет экономичные резидентные и мобильные прокси с поддержкой HTTP и SOCKS5, идеальные для веб-скрапинга большого объема. В сочетании с Playwright, мощной библиотекой автоматизации браузера, вы можете собирать данные с динамических сайтов с интенсивным использованием JavaScript, одновременно ротируя IP-адреса, чтобы избежать блокировок. Это руководство охватывает продвинутые техники интеграции прокси Dataimpulse с Playwright с использованием Python asyncio для параллельного скрапинга.

Предварительные требования

  • Аккаунт Dataimpulse с резидентными или мобильными прокси (оплата по мере использования). Вам понадобятся хост, порт, имя пользователя и пароль прокси.
  • Python 3.8 или новее.
  • Установленный Playwright: pip install playwright и playwright install.
  • Базовые знания Python async/await.

Шаги

1. Настройте учетные данные прокси Dataimpulse

Войдите в панель управления Dataimpulse и запишите конечную точку прокси. Dataimpulse поддерживает протоколы HTTP и SOCKS5. В этом руководстве мы будем использовать HTTP, но при необходимости вы можете заменить схему на socks5.

Сохраните учетные данные в переменных окружения, чтобы избежать жесткого кодирования:

export DI_PROXY_HOST="your-proxy-host.dataimpulse.com"
export DI_PROXY_PORT="12345"
export DI_PROXY_USER="your-username"
export DI_PROXY_PASS="your-password"

Замените значения на ваши реальные учетные данные Dataimpulse.

2. Установите необходимые пакеты Python

Создайте новый файл Python, например, scraper.py, и установите необходимые пакеты:

pip install playwright aiohttp

3. Запустите Playwright с прокси Dataimpulse

Опция proxy в Playwright позволяет указать прокси-сервер, имя пользователя и пароль. Вот как запустить Chromium с вашим прокси Dataimpulse:

import os
from playwright.async_api import async_playwright

async def scrape_with_proxy():
    async with async_playwright() as p:
        proxy_settings = {
            "server": f"http://{os.getenv('DI_PROXY_HOST')}:{os.getenv('DI_PROXY_PORT')}",
            "username": os.getenv('DI_PROXY_USER'),
            "password": os.getenv('DI_PROXY_PASS')
        }
        browser = await p.chromium.launch(proxy=proxy_settings, headless=True)
        page = await browser.new_page()
        await page.goto("https://httpbin.org/ip")
        content = await page.content()
        print(content)
        await browser.close()

# Run
import asyncio
asyncio.run(scrape_with_proxy())

Запустите скрипт, чтобы убедиться, что ваш IP — это IP прокси.

4. Реализуйте ротацию IP

Резидентные прокси Dataimpulse автоматически меняют IP-адреса при каждом запросе, или вы можете использовать липкие сессии. Чтобы ротировать IP при каждом запросе, просто создайте новый контекст браузера или страницу для каждого URL, который вы скрапите. Для лучшей производительности повторно используйте экземпляр браузера, но создавайте новый контекст для каждого запроса:

async def scrape_urls(urls):
    async with async_playwright() as p:
        proxy_settings = {
            "server": f"http://{os.getenv('DI_PROXY_HOST')}:{os.getenv('DI_PROXY_PORT')}",
            "username": os.getenv('DI_PROXY_USER'),
            "password": os.getenv('DI_PROXY_PASS')
        }
        browser = await p.chromium.launch(proxy=proxy_settings, headless=True)
        
        for url in urls:
            context = await browser.new_context()
            page = await context.new_page()
            try:
                await page.goto(url, timeout=30000)
                # Extract data...
                print(f"Scraped {url} with new IP")
            except Exception as e:
                print(f"Error scraping {url}: {e}")
            finally:
                await context.close()
        
        await browser.close()

5. Используйте липкие сессии для многошаговых сценариев

Если вам нужно поддерживать один и тот же IP для нескольких запросов (например, вход, затем навигация), Dataimpulse может поддерживать липкие сессии через идентификатор сессии в имени пользователя. Проверьте документацию Dataimpulse для точного формата. Обычно вы добавляете идентификатор сессии к имени пользователя, например username-session-abc123. Вот пример:

session_id = "abc123"
proxy_settings = {
    "server": f"http://{os.getenv('DI_PROXY_HOST')}:{os.getenv('DI_PROXY_PORT')}",
    "username": f"{os.getenv('DI_PROXY_USER')}-session-{session_id}",
    "password": os.getenv('DI_PROXY_PASS')
}

6. Обработка параллелизма и ошибок

Для крупномасштабного скрапинга используйте asyncio для одновременного запуска нескольких скраперов. Учитывайте ограничения скорости Dataimpulse и терпимость целевого сайта. Используйте семафоры для ограничения параллелизма:

import asyncio
from asyncio import Semaphore

async def worker(url, browser, semaphore):
    async with semaphore:
        context = await browser.new_context()
        page = await context.new_page()
        try:
            await page.goto(url, timeout=30000)
            # Extract data...
            return await page.title()
        except Exception as e:
            print(f"Error: {e}")
            return None
        finally:
            await context.close()

async def main(urls):
    semaphore = Semaphore(10)  # limit to 10 concurrent pages
    async with async_playwright() as p:
        proxy_settings = {...}  # as before
        browser = await p.chromium.launch(proxy=proxy_settings, headless=True)
        tasks = [worker(url, browser, semaphore) for url in urls]
        results = await asyncio.gather(*tasks)
        await browser.close()
        return results

urls = ["https://example.com/page1", "https://example.com/page2"]
titles = asyncio.run(main(urls))
print(titles)

Устранение неполадок

  • Ошибка аутентификации прокси: Перепроверьте имя пользователя/пароль. Убедитесь, что вы используете правильные хост и порт от Dataimpulse.
  • Тайм-ауты или медленные ответы: Увеличьте тайм-аут в page.goto(). Рассмотрите использование другого местоположения прокси или уменьшение параллелизма.
  • IP заблокирован: Даже резидентные IP-адреса могут быть заблокированы. Реализуйте задержки, ротируйте user-agent'ы и обрабатывайте CAPTCHA без сбоев.
  • Playwright падает на Linux: Установите отсутствующие зависимости с помощью playwright install-deps.

Итог

Вы узнали, как интегрировать ротационные резидентные прокси Dataimpulse с Playwright для продвинутого веб-скрапинга. Используя автоматизацию браузера Playwright и большой пул IP-адресов Dataimpulse, вы можете масштабно собирать данные с динамических сайтов, минимизируя блокировки. Не забывайте уважать условия обслуживания целевых сайтов и robots.txt.