ProxyScrape Python et Web : comment récupérer, valider et faire tourner des proxys
ProxyScrape propose des listes de proxys téléchargeables et une API, mais les listes gratuites ne constituent pas une infrastructure de production. Voici un workflow Python sûr pour récupérer, valider et faire tourner des proxys, ainsi que ce qu'il faut vérifier dans le tableau de bord web.
ProxyScrape est souvent recherché avec Python, car les utilisateurs veulent récupérer une liste de proxys, la tester et la faire tourner dans un script. Le tableau de bord web et l'API se chevauchent, mais ils ont des objectifs différents. Ce guide se concentre sur un workflow sûr : récupérer, valider, faire tourner, et savoir quand les proxys gratuits ne sont pas l'outil adapté.
Ce que vous obtenez avec ProxyScrape : listes web, API et pools payants
ProxyScrape fournit des téléchargements de listes de proxys et un accès API, ainsi que des services de proxys commerciaux. Les points de terminaison, protocoles, formats, limites et emplacements disponibles exacts peuvent changer, donc confirmez-les toujours dans votre tableau de bord ProxyScrape ou dans la documentation actuelle. Ne codez pas en dur un point de terminaison trouvé dans un ancien tutoriel sans le vérifier.
Les listes de proxys gratuites conviennent mieux à l'apprentissage et aux tests. Elles sont généralement inadaptées au scraping en production, aux connexions ou à toute donnée sensible, car la disponibilité, la vitesse et la fiabilité varient considérablement.
Récupérer une liste de proxys en Python
Commencez par stocker l'URL de l'API dans une variable d'environnement plutôt que de l'intégrer dans votre code.
import os
import requests
API_URL = os.environ['PROXYSCRAPE_API_URL'] # copy from your ProxyScrape dashboard/docs
response = requests.get(API_URL, timeout=15)
response.raise_for_status()
lines = [line.strip() for line in response.text.splitlines() if line.strip()]
print(f'Fetched {len(lines)} proxies')
print(lines[:5])
Si l'API renvoie du JSON, inspectez la structure de la réponse avant de choisir les champs. Les noms des champs peuvent changer.
data = response.json()
# Adjust this to match the current API response
proxies = [item['proxy'] for item in data.get('proxies', [])]
Valider les proxys avant qu'ils ne vous fassent perdre du temps
Une liste de proxys n'est utile qu'après l'avoir testée. Validez-la à l'aide d'un point de terminaison d'écho IP inoffensif et notez quels proxys fonctionnent.
import concurrent.futures
import requests
TEST_URL = 'https://api.ipify.org?format=json'
def check(proxy):
# Use http:// for HTTP proxies.
# For SOCKS5, install requests[socks] and use socks5h://host:port.
proxy_url = f'http://{proxy}'
proxies = {'http': proxy_url, 'https': proxy_url}
try:
response = requests.get(TEST_URL, proxies=proxies, timeout=8)
response.raise_for_status()
return proxy, response.json()
except Exception:
return proxy, None
working = []
with concurrent.futures.ThreadPoolExecutor(max_workers=50) as pool:
for proxy, result in pool.map(check, lines[:200]):
if result:
working.append(proxy)
print('OK', proxy, result)
print(f'Working: {len(working)}')
Pour les proxys SOCKS5, utilisez socks5h://host:port lorsque vous voulez un DNS distant. Pour les proxys authentifiés, le format est généralement http://user:pass@host:port ou socks5h://user:pass@host:port, mais confirmez le format du fournisseur.
Faire tourner des proxys dans un script Python
Une fois que vous disposez d'un pool de proxys fonctionnels, faites-les tourner avec une stratégie prévisible. La rotation à chaque requête est facile, mais elle peut casser les sessions et déclencher des vérifications de connexion.
import itertools
import requests
from requests.adapters import HTTPAdapter
working_proxies = working # from the validator above
proxy_cycle = itertools.cycle(working_proxies)
session = requests.Session()
session.mount('https://', HTTPAdapter(max_retries=2))
urls = [
'https://example.com/page/1',
'https://example.com/page/2',
'https://example.com/page/3',
]
for url in urls:
proxy = next(proxy_cycle)
proxies = {
'http': f'http://{proxy}',
'https': f'http://{proxy}',
}
try:
response = session.get(url, proxies=proxies, timeout=12)
print(response.status_code, proxy, url)
except requests.RequestException as exc:
print('FAILED', proxy, exc)
Si le site cible a besoin d'une session stable, utilisez des sessions persistantes (sticky sessions) au lieu de faire tourner à chaque requête. De nombreux fournisseurs implémentent cela via un ID de session dans le nom d'utilisateur. Consultez la documentation de votre fournisseur pour le format exact ; ne devinez pas.
Utiliser le tableau de bord web ProxyScrape
L'interface web est utile pour des vérifications rapides :
- Télécharger une liste dans le format dont vous avez besoin.
- Filtrer par protocole, comme HTTP ou SOCKS5, si disponible.
- Filtrer par pays ou niveau d'anonymat si disponible.
- Copier le point de terminaison de l'API pour l'automatisation.
- Vérifier si la liste est gratuite ou liée à un forfait payant.
- Confirmer que le site cible autorise le type d'accès que vous prévoyez.
Si une liste téléchargée est obsolète en quelques minutes, c'est normal pour des proxys gratuits. Considérez-la comme jetable.
Vérifications éthiques, de sécurité et juridiques
- Respectez les conditions du site cible, le fichier robots.txt et les limites de débit.
- N'envoyez pas d'identifiants, de données personnelles ou de données de paiement via des proxys gratuits non fiables.
- Utilisez TLS et vérifiez les certificats.
- Si vous traitez des données personnelles, vérifiez le RGPD, le CCPA et les autres règles applicables.
- Utilisez des proxys résidentiels ou de centre de données payants lorsque vous avez besoin de fiabilité et de support.
À retenir
ProxyScrape peut être utilisé à la fois depuis le tableau de bord web et depuis Python, mais le workflow compte plus que la source. Récupérez la liste actuelle, validez-la, faites tourner avec un objectif, et gardez les proxys gratuits là où ils ont leur place : dans les tests et l'apprentissage.