Python : résoudre l'erreur Scraping: SSL: CERTIFICATE_VERIFY_FAILED error for xxx ?

Le langage Python propose un nombre incroyable de fonctionnalités pour créer un script, une application ou un logiciel entier. On peut notamment récupérer des ressources sur internet. Le langage propose en effet ses propres librairies de "Web scraping", pour pouvoir naviguer avec du code sur un site internet. On peut par exemple s'en servir pour réaliser des tests d'une application web ou d'un site internet. Le message d'erreur "Scraping: SSL: CERTIFICATE_VERIFY_FAILED error" est lié à la vérification des certificats SSL d'une URL à laquelle on souhaite accéder.

Lorsque vous souhaitez vous rendre sur une page internet, la première vérification qu'effectue le navigateur est celle du certificat SSL. Ce certificat garantit que les échanges avec le site sont cryptés et atteste de la fiabilité du site internet. Dans le langage Python, que vous utilisiez la librairie "urllib" ou bien la librairie "Scrapy", la procédure est la même. Le certificat du site est systématiquement vérifié avant d'accéder à une URL, afin de garantir la sécurité du code qui l'exécute. Le plus souvent, ce message d'erreur se produit si vous travaillez avec un Mac. Lorsque vous installez Python, vous devez vous rendre dans le dossier d'installation situé dans le dossier "Applications". Vous devez ensuite cliquer sur les deux exécutables suivants : "Install Certificates.command" et "Update Shell Profile.command". Ces scripts vont ajouter les commandes nécessaires pour effectuer la vérification des certificats et permettre aux librairies Python d’accéder à un site internet.

Si vous ne travaillez pas sur Mac, ou que la procédure précédente n'a pas résolu votre erreur, il existe une solution pour ne pas effectuer la vérification de certificat. Cette solution est par contre très risquée au niveau de la sécurité. Vous ne devez utiliser ce code que si vous avez confiance dans le site internet auquel vous accédez, ou uniquement à des fins de développement. Insérez le code suivant au début de votre script Python afin de désactiver la vérification du certificat, et ne pas provoquer l'erreur.

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

Python