Web scraping avec Python requests et proxies
Un flux de travail de scraping pratique basé sur des requêtes et BeautifulSoup, routé via un proxy authentifié afin que votre IP d'origine reste cachée et que votre crawler survive aux limites de taux. Code exécutable complet inclus.
Un scraper est une session, pas une boucle de requêtes.
La différence entre un scraper qui fonctionne pendant dix minutes et un qui fonctionne pendant des heures n'est presque jamais le parsing — c'est la façon dont vous faites des requêtes. Un naïf for url in urls: requests.get(url) ouvre une nouvelle connexion TCP à chaque fois, n'envoie pas d'en-têtes réalistes, ne conserve pas de cookies, et attaque la cible depuis une seule IP jusqu'à obtenir un 429 ou un blocage.
La solution est une requests.Session plus un proxy. Une session regroupe les connexions et conserve les cookies, donc une rafale de pages est plus rapide et ressemble à un client cohérent. Un proxy authentifié remplace votre véritable adresse par une sortie de datacenter, donc le site ne voit jamais votre IP d'origine et une seule adresse bloquée ne met pas fin à tout le travail. Les proxies s4m parlent SOCKS5 sur le port 1080 et HTTP sur le port 3128, tous deux authentifiés avec USER:PASS — utilisez socks5h:// pour que le DNS soit résolu à distance et que les noms d'hôtes ne fuient jamais. Pour des expériences jetables, la liste de proxies publics gratuits est un pool séparé, à utiliser à vos risques et périls.
Un scraper de requêtes résilient
Session, en-têtes réalistes, réessais avec retour en arrière, rotation de proxy et analyse avec BeautifulSoup dans un seul fichier. Remplacez USER:PASS par vos identifiants.
import random
import time
import requests
from bs4 import BeautifulSoup
from requests.exceptions import RequestException
USER, PASS, HOST = "USER", "PASS", "proxy.s4m.online"
POOL = [
f"socks5h://{USER}:{PASS}@{HOST}:1080", # needs requests[socks]
f"http://{USER}:{PASS}@{HOST}:3128",
]
HEADERS = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
def make_session(proxy):
s = requests.Session()
s.headers.update(HEADERS)
s.proxies = {"http": proxy, "https": proxy}
return s
def fetch(url, retries=4):
for attempt in range(1, retries + 1):
proxy = random.choice(POOL)
try:
s = make_session(proxy)
r = s.get(url, timeout=(5, 20))
if r.status_code == 429:
raise RequestException("rate limited")
r.raise_for_status()
return r
except RequestException as e:
wait = 2 ** attempt + random.random() # exponential backoff
print(f"[{attempt}/{retries}] {proxy} -> {e}; sleeping {wait:.1f}s")
time.sleep(wait)
raise SystemExit(f"giving up on {url}")
html = fetch("https://quotes.toscrape.com/").text
soup = BeautifulSoup(html, "html.parser")
for q in soup.select(".quote"):
text = q.select_one(".text").get_text(strip=True)
who = q.select_one(".author").get_text(strip=True)
print(f"{who}: {text}")Ce qui maintient un crawler en vie
Quatre habitudes qui comptent plus que le parseur que vous choisissez.
Envoyez un vrai User-Agent
L'UA par défaut de python-requests est un drapeau instantané. Définissez un User-Agent de navigateur normal et un en-tête Accept-Language afin que les requêtes se fondent dans le trafic ordinaire.
Reculez, ne réessayez pas aveuglément
Sur un 429 ou un timeout, dormez avec un backoff exponentiel et du jitter avant de réessayer. Des boucles de réessai serrées approfondissent simplement le blocage et brûlent le trafic proxy.
Faire tourner la sortie, pas seulement la nouvelle tentative
Choisissez un nouveau proxy d'un pool à chaque tentative afin qu'une IP signalée ne stoppe pas le travail. Les proxies de datacenter facturés à l'utilisation rendent cela bon marché à échelle.
Respectez la cible
Lisez robots.txt, limitez la concurrence et ne récupérez que ce que vous êtes autorisé à faire. Un robot poli est aussi plus difficile à bloquer.
D'un script à un véritable pipeline
Une fois que la boucle de récupération est solide, le reste est de l'orchestration. Gardez un petit pool d'URLs proxy et faites-les tourner par demande ; lorsque une cible devient agressive, augmentez le pool plutôt que le nombre de tentatives. Conservez les résultats au fur et à mesure afin qu'un échec en cours d'exécution ne vous coûte jamais l'ensemble du crawl, et ajoutez un délai poli entre les pages pour rester en dessous de la limite de taux au lieu de lutter contre elle.
Lorsque vous dépassez les scripts ad-hoc, le même point de terminaison proxy s'intègre directement dans Scrapy ou un client asynchrone — consultez les proxies tournants en Python pour un pool aiohttp. Tout est construit sur les mêmes blocs de construction s4m : des proxies SOCKS5 et HTTP authentifiés de datacenter, payés à l'utilisation, avec l'API et les outils pour vérifier les IPs de sortie et les ports. Si vous avez seulement besoin de vérifier rapidement un pays ou un protocole, commencez par la liste gratuite.
Questions, réponses
Ai-je besoin de PySocks pour les exemples SOCKS5 ?
Oui. Le support SOCKS dans les requêtes provient de PySocks — installez-le avec pip install "requests[socks]". Le point de terminaison HTTP sur le port 3128 fonctionne avec une installation de requêtes standard et sans dépendance supplémentaire.
Comment éviter d'être bloqué lors du scraping ?
Envoyez un User-Agent réaliste, limitez votre taux de requêtes, réduisez les réponses 429, et faites tourner les IP de sortie à travers un pool de proxies. Les blocages concernent généralement le comportement et la réputation de l'IP, pas le parseur que vous utilisez.
Les proxies s4m sont-ils résidentiels ?
Non. s4m vend des proxys SOCKS5 et HTTP de centres de données authentifiés, facturés à l'utilisation. La liste de proxys publics gratuits séparée est tierce et à vos risques et périls, utile uniquement pour des tests rapides.
Pourquoi utiliser socks5h au lieu de socks5 ?
socks5h demande au proxy de résoudre DNS, donc les noms d'hôtes que vous scrapez ne fuient jamais de votre machine. Le socks5 simple résout d'abord localement, ce qui peut révéler vos cibles.
Proxys conçus pour le scraping
Dirigez les requêtes vers proxy.s4m.online, faites tourner à travers des sorties SOCKS5 et HTTP authentifiées du datacenter, et ne payez que pour le trafic que vous utilisez. Ajoutez une IP dédiée chaque fois qu'une cible en attend une.
Les gens ont trouvé cette page en recherchant
- web scraping avec Python requests et proxies
- proxy pour le scraping tutoriel
- redirection de port via des VPN et des proxies
- proxy pour le scraping
- comment configurer openvpn
- télécharger configuration du proxy
- interrupteur d'arrêt VPN
- proxy http
- comment liste de proxies gratuits fonctionne
- WireGuard vs OpenVPN
- adresse IP
- payer pour un VPN ou un proxy avec des cryptomonnaies
- acheter proxy http
Vraies phrases de recherche auxquelles cette page répond — les liens ouvrent la page qui les couvre en profondeur.