Scraping web avancé avec les proxies résidentiels rotatifs Dataimpulse et Playwright
Apprenez à intégrer les proxies résidentiels rotatifs de Dataimpulse avec Playwright pour construire un pipeline de scraping web résilient et à grande échelle qui gère le contenu dynamique et les mesures anti-bot.
Aperçu
Dataimpulse propose des proxies résidentiels et mobiles économiques avec prise en charge de HTTP et SOCKS5, idéaux pour le scraping web à haut volume. Combinés à Playwright, une puissante bibliothèque d'automatisation de navigateur, vous pouvez scraper des sites dynamiques et riches en JavaScript tout en faisant tourner les IP pour éviter les blocages. Ce tutoriel couvre des techniques avancées pour intégrer les proxies Dataimpulse à Playwright à l'aide d'asyncio de Python pour le scraping concurrent.
Prérequis
- Un compte Dataimpulse avec des proxies résidentiels ou mobiles (paiement à l'usage). Vous aurez besoin de l'hôte, du port, du nom d'utilisateur et du mot de passe de votre proxy.
- Python 3.8 ou version ultérieure.
- Playwright installé :
pip install playwrightetplaywright install. - Connaissances de base de Python async/await.
Étapes
1. Configurez vos identifiants proxy Dataimpulse
Connectez-vous à votre tableau de bord Dataimpulse et notez le point de terminaison de votre proxy. Dataimpulse prend en charge les protocoles HTTP et SOCKS5. Pour ce tutoriel, nous utiliserons HTTP, mais vous pouvez remplacer le schéma par socks5 si nécessaire.
Stockez vos identifiants dans des variables d'environnement pour éviter de les coder en dur :
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"
Remplacez les valeurs par vos véritables identifiants Dataimpulse.
2. Installez les paquets Python requis
Créez un nouveau fichier Python, par exemple scraper.py, et installez les paquets nécessaires :
pip install playwright aiohttp
3. Lancez Playwright avec le proxy Dataimpulse
L'option proxy de Playwright vous permet de spécifier le serveur proxy, le nom d'utilisateur et le mot de passe. Voici comment lancer Chromium avec votre proxy 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())
Exécutez le script pour vérifier que votre IP est celle du proxy.
4. Implémentez la rotation d'IP
Les proxies résidentiels Dataimpulse font tourner les IP automatiquement à chaque requête, ou vous pouvez utiliser des sessions persistantes. Pour faire tourner à chaque requête, créez simplement un nouveau contexte de navigateur ou une nouvelle page pour chaque URL que vous scrapez. Pour de meilleures performances, réutilisez l'instance de navigateur mais créez un nouveau contexte par requête :
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. Utilisez des sessions persistantes pour les flux multi-étapes
Si vous devez conserver la même IP sur plusieurs requêtes (par exemple, se connecter, puis naviguer), Dataimpulse peut prendre en charge les sessions persistantes via un identifiant de session dans le nom d'utilisateur. Consultez la documentation de Dataimpulse pour le format exact. Généralement, vous ajoutez un ID de session au nom d'utilisateur comme username-session-abc123. Voici un exemple :
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. Gérez la concurrence et la gestion des erreurs
Pour le scraping à grande échelle, utilisez asyncio pour exécuter plusieurs scrapers en parallèle. Faites attention aux limites de débit de Dataimpulse et à la tolérance du site cible. Utilisez des sémaphores pour limiter la concurrence :
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)
Dépannage
- Échec de l'authentification proxy : Vérifiez votre nom d'utilisateur/mot de passe. Assurez-vous d'utiliser l'hôte et le port corrects de Dataimpulse.
- Expirations ou réponses lentes : Augmentez le délai d'attente dans
page.goto(). Envisagez d'utiliser un autre emplacement de proxy ou de réduire la concurrence. - IP bloquée : Même les IP résidentielles peuvent être bloquées. Mettez en place des délais, faites tourner les user agents et gérez les CAPTCHAs avec élégance.
- Playwright plante sous Linux : Installez les dépendances manquantes avec
playwright install-deps.
Résumé
Vous avez appris à intégrer les proxies résidentiels rotatifs Dataimpulse avec Playwright pour le scraping web avancé. En tirant parti de l'automatisation de navigateur de Playwright et du grand pool d'IP de Dataimpulse, vous pouvez scraper des sites dynamiques à grande échelle tout en minimisant les blocages. N'oubliez pas de respecter les conditions d'utilisation des sites cibles et le fichier robots.txt.