Lors de l'exploration du web, l'utilisation d'une IP proxy peut vous aider à contourner les restrictions d'accès d'un site web. Cependant, les IP proxy peuvent parfois avoir des problèmes avec les délais d'attente des requêtes. Voici quelques méthodes et conseils pour résoudre ce problème.
Vérifier la disponibilité de l'IP du proxy
Tout d'abord, vous devez vous assurer que l'adresse IP du proxy est disponible. Les IP proxy peuvent être indisponibles pour diverses raisons (par exemple, défaillance du serveur, problèmes de réseau, etc.) Vous pouvez écrire une fonction pour vérifier la disponibilité de l'IP proxy :
demandes d'importation
def check_proxy(proxy) : url = "
url = "http://www.google.com"
try : response = requests.get(url, proxies=proxy, timeout=5)
response = requests.get(url, proxies=proxy, timeout=5)
if response.status_code == 200: : url = "
return True
except requests.RequestException : return False
RequestException : return False
return False
# Exemple de proxy IP
proxy = {"http" : "http://123.45.67.89:8080", "https" : "https://123.45.67.89:8080"}
if check_proxy(proxy).
print("IP proxy disponible")
else : if check_proxy(proxy) : print("IP proxy disponible")
print("IP proxy non disponible")
Fixer un délai raisonnable
Lors de l'envoi d'une requête web, la fixation d'un délai raisonnable permet d'éviter les longues attentes. Voici comment définir le délai d'attente dans la bibliothèque des requêtes :
demandes d'importation
proxy = {"http" : "http://123.45.67.89:8080", "https" : "https://123.45.67.89:8080"}
url = "http://www.example.com"
try.
response = requests.get(url, proxies=proxy, timeout=5) # fixe le timeout à 5 secondes
print(response.text)
except requests.Timeout.
Timeout. print("Délai d'attente de la demande")
except requests.RequestException as e : print(response.text)
RequestException as e : print(f "Request failed : {e}")
Utilisation des pools de serveurs mandataires
Afin d'améliorer la stabilité et le taux de réussite du crawler, vous pouvez utiliser un pool de proxy. Un pool de proxy est une liste d'adresses IP de proxy qui peuvent être automatiquement basculées vers l'adresse IP de proxy suivante lorsqu'une requête provenant de l'une des adresses IP de proxy n'aboutit pas.Voici un exemple d'implémentation d'un pool de proxy simple :
importer des demandes
importer aléatoire
Liste des serveurs mandataires de #
proxies_list = [
{"http" : "http://123.45.67.89:8080", "https" : "https://123.45.67.89:8080"},
{"http" : "http://234.56.78.90:8080", "https" : "https://234.56.78.90:8080"},
{"http" : "http://345.67.89.01:8080", "https" : "https://345.67.89.01:8080"}, {"http" : "http://345.67.89.01:8080", "https" : "https://345.67.89.01:8080"}, }
# Ajouter plus d'IP de proxy
]
Fonction de requête #
def fetch_url(url).
while proxies_list.
proxy = random.choice(proxies_list)
try.
response = requests.get(url, proxies=proxy, timeout=5)
return response.text
except requests.
RequestException : print(f "Proxy {proxy} request failed, try next proxy")
proxies_list.remove(proxy)
return "Toutes les IP de proxy sont indisponibles".
# URL de destination
url = "http://www.example.com"
result = fetch_url(url)
print(result)
Utilisation de services de procuration de haute qualité
Les IP proxy gratuites sont généralement instables et lentes, et il est recommandé d'utiliser un service proxy payant de haute qualité. Les services de proxy payants offrent une plus grande fiabilité et une plus grande rapidité, et peuvent réduire de manière significative le problème des dépassements de temps de requête.
Ajout d'un mécanisme de réessai
L'ajout d'un mécanisme de réessai en cas d'échec d'une demande augmente la probabilité que la demande aboutisse. Voici un exemple simple de mécanisme de relance :
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
# Création d'un objet session
session = requests.Session()
# Définir une stratégie de relance
retry_strategy = Retry(
total=3, # Nombre de tentatives
backoff_factor=1, # Multiplicateur pour l'intervalle entre les tentatives
status_forcelist=[429, 500, 502, 503, 504], # Code d'état nécessitant une nouvelle tentative
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adaptateur)
session.mount("https://", adaptateur)
IP du proxy #
proxy = {"http" : "http://123.45.67.89:8080", "https" : "https://123.45.67.89:8080"}
url = "http://www.example.com"
try.
response = session.get(url, proxies=proxy, timeout=5)
print(response.text)
except requests.
RequestException as e : print(f "Request failed : {e}")
résumés
Grâce aux méthodes et aux conseils ci-dessus, vous pouvez résoudre efficacement le problème du délai d'attente de la demande d'IP du proxy. Qu'il s'agisse de vérifier la disponibilité des IP proxy, de définir des délais raisonnables, d'utiliser des pools de proxy, de choisir des services proxy de haute qualité ou d'ajouter un mécanisme de réessai, toutes ces méthodes peuvent améliorer la stabilité et le taux de réussite de votre crawler.
J'espère que cet article vous aidera à mieux gérer le problème du délai d'attente de la requête IP du proxy, et je vous souhaite un processus de capture de données efficace et sans heurts !