Retour au blog
Guides
Raluca Penciuc3 février 20236 min de lecture

Maîtriser le web scraping : comment faire tourner les proxys en Python

Maîtriser le web scraping : comment faire tourner les proxys en Python

Configuration de l'environnement

Avant de commencer, assurons-nous de disposer des outils nécessaires. Tout d'abord, téléchargez et installez la dernière version de Python depuis le site officiel.

Pour ce tutoriel, nous utiliserons Visual Studio Code comme environnement de développement intégré (IDE), mais vous pouvez utiliser n'importe quel autre IDE de votre choix. Créez un nouveau dossier pour votre projet et un nouveau fichier index.py, dans lequel nous écrirons notre code.

Ouvrez maintenant le terminal et exécutez la commande suivante pour installer le paquet nécessaire à l'envoi de requêtes :

pip install requests

Et c'est tout ! Nous pouvons commencer à coder.

Proxifier une requête GET

Commençons par envoyer une simple requête GET. Dans le fichier index.py nouvellement créé, écrivez le code suivant :

import requests

response = requests.get('https://api.ipify.org/?format=json')

print(response.text)

Exécutez maintenant le script à l'aide de la commande suivante :

py index.py

Vous remarquerez que le résultat correspond à votre adresse IP réelle et que, quel que soit le nombre de fois où vous exécutez le script, il affichera toujours le même résultat.

L'objectif de ce guide est de vous montrer comment masquer votre adresse IP réelle et comment obtenir une adresse IP différente à chaque exécution du script. C'est là que les proxys entrent en jeu. Vous les trouverez sous la structure suivante :

http://proxy_username:proxy_password@proxy_host:proxy_port

Le protocole peut être « http », « https », « socks4 » ou « socks5 », tandis que « proxy_username » et « proxy_password » sont facultatifs.

Le code mis à jour devrait ressembler à ceci :

import requests

proxy_schema = {

    "http": "http://proxy_username:proxy_password@proxy_host:proxy_port",

    "https": "https://proxy_username:proxy_password@proxy_host:proxy_port"

}

URL = 'https://api.ipify.org/?format=json'

response = requests.get(URL, proxies=proxy_schema)

print(response.text)

Vous pouvez remplacer le modèle de proxy par un véritable proxy, fourni par un service de proxy gratuit, à des fins de test uniquement. Il convient toutefois de mentionner qu'ils ne sont pas fiables et ne doivent être utilisés qu'à des fins de test.

Quoi qu'il en soit, étant donné que même les meilleurs proxys peuvent parfois être instables, il est recommandé de gérer les exceptions dans notre code :

try:

    URL = 'https://api.ipify.org/?format=json'

    response = requests.get(URL, proxies=proxy_schema, timeout=30)

    print(response.text)

except:

    print('Unable to connect to the proxy')

Si vous avez réussi à trouver un proxy gratuit qui fonctionne, après avoir exécuté le code, vous devriez constater que le résultat a changé, car il ne s'agit plus de votre véritable adresse IP.

Faire tourner les proxys

Voyons maintenant comment utiliser plusieurs proxys pour anonymiser nos requêtes. Dans le même temps, nous allons gérer la vitesse de notre script. Nous enverrons les requêtes de manière asynchrone, en utilisant la bibliothèque « concurrent.futures ».

Tout d'abord, supposons que nous disposions de la liste de proxys suivante (ou pool de proxys) :

proxy_pool = [

    "http://191.5.0.79:53281",

    "http://202.166.202.29:58794",

    "http://51.210.106.217:443",

    "http://5103.240.161.109:6666"

]

Elle peut être soit codée en dur, soit lue à partir d’un fichier, à votre convenance. À partir de là, nous pouvons écrire le code suivant :

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(max_workers=8) as pool:

    for response in list(pool.map(scrape_job, proxy_pool)):

        pass

Nous initialisons un pool de threads avec un maximum de 8 workers, pour exécuter la fonction « scrape_job » (qui sera définie prochainement), qui recevra en paramètre un élément de la liste « proxy_pool ».

La fonction « scrape_job » reprendra le code que nous avons écrit précédemment, avec une petite modification :

def scrape_job(proxy):

    try:

        URL = 'https://api.ipify.org/?format=json'

        proxy_scheme = {

            "http": proxy,

        	"https": proxy

    	  }

    	  response = requests.get(URL, proxies=proxy_scheme, timeout=30)

    	  print(response.text)

    except:

        print('Unable to connect to the proxy')

La variable « proxy_scheme » sera désormais attribuée dynamiquement, en fonction du proxy que nous envoyons en paramètre. Le script peut être étendu à plusieurs URL, avec une valeur de délai d'expiration spécifique pour chacune.

L'exécution du script devrait envoyer plusieurs requêtes GET simultanément, dont le résultat serait différentes adresses IP (si les proxys gratuits fonctionnent).

Mise à l'échelle

Lorsqu'il s'agit de commencer à faire tourner les proxys, il existe quelques bonnes pratiques clés qui peuvent vous aider à garantir que votre rotation de proxys soit aussi efficace que possible. Voici quelques conseils à garder à l'esprit :

Les proxys gratuits sont à éviter

Bien que les services de proxy gratuits puissent sembler être une option économique, ils sont souvent peu fiables et peuvent même mettre en péril vos efforts de scraping. Envisagez d'investir dans un service de proxy premium offrant un niveau de sécurité et de fiabilité supérieur.

Testez avant de scraper

Avant de commencer le scraping, il est judicieux de tester votre rotation de proxys pour vous assurer qu'elle fonctionne comme prévu. Cela vous aidera à identifier et à résoudre tout problème avant qu'il ne cause des difficultés par la suite.

Utilisez la rotation d'agent utilisateur

La rotation de votre adresse IP est un moyen efficace de contourner les mesures anti-scraping, mais ce n'est pas la seule technique sur laquelle vous devriez vous appuyer. Associer la rotation d'IP à la rotation d'agent utilisateur, qui modifie la signature du navigateur, peut rendre encore plus difficile pour les sites web de détecter et de bloquer votre scraper.

Services de proxy premium

Tous les services de proxy ne se valent pas ; il est donc important de faire des recherches et de choisir un fournisseur offrant un haut niveau de sécurité et de fiabilité. Recherchez un service proposant un large éventail d'adresses IP et d'emplacements, ainsi que des fonctionnalités telles que la rotation automatique des adresses IP et la navigation anonyme.

Utilisez une API de web scraping

L'utilisation d'une API de web scraping peut être un excellent moyen de simplifier le processus de rotation des proxys, surtout si vous débutez dans le web scraping. Une bonne API de scraper gérera la rotation des proxys à votre place et vous fournira une interface claire et facile à utiliser pour accéder aux données dont vous avez besoin.

Son mécanisme de rotation des proxys évite tout blocage, et sa base de connaissances étendue permet de randomiser les données du navigateur afin qu'il ressemble à un véritable utilisateur.

Toutefois, si vous souhaitez conserver votre propre scraper, ou si votre cas d'utilisation est trop complexe, vous avez également la possibilité d'accéder à l'API en tant que proxy. La requête sera simplement redirigée vers l'API tandis que votre script bénéficiera de la rotation des proxys.

Conclusion

En résumé, savoir comment faire tourner les proxys est une technique essentielle pour le web scraping, et Python facilite sa mise en œuvre. En suivant les étapes décrites dans ce guide, vous avez acquis des connaissances allant de la redirection d'une seule requête vers un proxy à la manière d'accélérer le processus de rotation des proxys.

De plus, vous avez découvert quelques astuces supplémentaires sur la rotation des proxys pour faire évoluer votre projet.

N'oubliez pas qu'une rotation efficace des proxys peut considérablement augmenter le taux de réussite de vos projets de web scraping, et ce guide vous a fourni les outils et les connaissances nécessaires pour le faire comme un pro. Bon scraping !

À propos de l'auteur
Raluca Penciuc, Développeur full-stack @ WebScrapingAPI
Raluca PenciucDéveloppeur full-stack

Raluca Penciuc est développeuse Full Stack chez WebScrapingAPI ; elle conçoit des robots de collecte de données, améliore les techniques de contournement et recherche des moyens fiables de réduire le risque de détection sur les sites cibles.

Commencez à créer

Prêt à faire évoluer votre système de collecte de données ?

Rejoignez plus de 2 000 entreprises qui utilisent WebScrapingAPI pour extraire des données Web à l'échelle de l'entreprise, sans aucun coût d'infrastructure.