English English French French Spanish Spanish German German
Geekflare est soutenu par notre public. Nous pouvons gagner des commissions d'affiliation en achetant des liens sur ce site.
Partager sur:

Web Scraping à l'aide de Python : guide étape par étape

python-web-scraping
Scanner de sécurité des applications Web Invicti – la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

Le scraping Web consiste à extraire des informations d'un site Web et à les utiliser pour un cas d'utilisation particulier.

Supposons que vous essayez d'extraire un tableau d'une page Web, de le convertir en fichier JSON et d'utiliser le fichier JSON pour créer des outils internes. À l'aide du web scraping, vous pouvez extraire les données souhaitées en ciblant les éléments spécifiques d'une page Web. Le scraping Web à l'aide de Python est un choix très populaire car Python fournit plusieurs bibliothèques comme BeautifulSoup ou Scrapy pour extraire efficacement les données.

raclage Web

Avoir la compétence d'extraire efficacement des données est également très important en tant que développeur ou Data Scientist. Cet article vous aidera à comprendre comment scraper efficacement un site Web et à obtenir le contenu nécessaire pour le manipuler en fonction de vos besoins. Pour ce tutoriel, nous utiliserons le BeautifulSoup forfait. C'est un package à la mode pour récupérer des données en Python.

Why use Python for Web Scraping?

Python est le premier choix de nombreux développeurs lors de la création de scrapers Web. Il existe de nombreuses raisons pour lesquelles Python est le premier choix, mais pour cet article, discutons des trois principales raisons pour lesquelles Python est utilisé pour le scraping de données.

Soutien à la bibliothèque et à la communauté : Il existe plusieurs grandes bibliothèques, comme BeautifulSoup, Scrapy, Selenium, etc., qui offrent d'excellentes fonctions pour gratter efficacement les pages Web. Il a construit un excellent écosystème pour le scraping Web, et aussi parce que de nombreux développeurs dans le monde utilisent déjà Python, vous pouvez rapidement obtenir de l'aide lorsque vous êtes bloqué.

Automation: Python est célèbre pour ses capacités d'automatisation. Plus que le grattage Web est nécessaire si vous essayez de créer un outil complexe qui repose sur le grattage. Par exemple, si vous souhaitez créer un outil qui suit le prix des articles dans une boutique en ligne, vous devrez ajouter une capacité d'automatisation afin qu'il puisse suivre les tarifs quotidiennement et les ajouter à votre base de données. Python vous permet d'automatiser facilement ces processus.

Visualisation de données: Le web scraping est très utilisé par les data scientists. Les scientifiques des données ont souvent besoin d'extraire des données de pages Web. Avec des bibliothèques comme Pandas, Python rend visualisation de données plus simple à partir de données brutes.

Libraries for Web Scraping in Python

Il existe plusieurs bibliothèques disponibles en Python pour simplifier le scraping Web. Discutons ici des trois bibliothèques les plus populaires.

# 1. BeautifulSoup

L'une des bibliothèques les plus populaires pour le grattage Web. BeautifulSoup aide les développeurs à gratter des pages Web depuis 2004. Il fournit des méthodes simples pour naviguer, rechercher et modifier l'arborescence d'analyse. Beautifulsoup s'occupe également de l'encodage des données entrantes et sortantes. Il est bien entretenu et a une grande communauté.

# 2. Scrapy

Un autre cadre populaire pour l'extraction de données. Scrapy a plus de 43000 étoiles sur GitHub. Il peut également être utilisé pour extraire des données des API. Il a également quelques supports intégrés intéressants, comme l'envoi d'e-mails.

# 3. Sélénium

Sélénium n'est pas principalement une bibliothèque de grattage Web. Au lieu de cela, il s'agit d'un package d'automatisation du navigateur. Mais nous pouvons facilement étendre ses fonctionnalités pour gratter des pages Web. Il utilise le protocole WebDriver pour contrôler différents navigateurs. Le sélénium est sur le marché depuis près de 20 ans maintenant. Mais en utilisant Selenium, vous pouvez facilement automatiser et récupérer les données des pages Web.

Challenges with Python Web Scraping

On peut faire face à de nombreux défis lorsqu'on essaie d'extraire des données de sites Web. Il existe des problèmes tels que les réseaux lents, les outils anti-grattage, le blocage basé sur IP, le blocage captcha, etc. Ces problèmes peuvent causer d'énormes problèmes lorsque vous essayez de gratter un site Web.

Mais vous pouvez efficacement contourner les défis en suivant certaines méthodes. Par exemple, dans la plupart des cas, un adresse IP est bloqué par un site Web lorsqu'il y a plus qu'un certain nombre de demandes envoyées dans un intervalle de temps spécifique. Pour éviter le blocage IP, vous devrez coder votre scraper afin qu'il refroidisse après l'envoi de requêtes.

challenges-dans-le-web-scraping

Les développeurs ont également tendance à mettre des pièges à pots de miel pour les grattoirs. Ces pièges sont généralement invisibles à l'œil nu mais peuvent être rampés par un grattoir. Si vous grattez un site Web qui met un tel piège à pot de miel, vous devrez coder votre grattoir en conséquence.

Captcha est un autre problème grave avec les grattoirs. De nos jours, la plupart des sites Web utilisent un captcha pour protéger l'accès des bots à leurs pages. Dans ce cas, vous devrez peut-être utiliser un solveur de captcha.

Scraping a Website with Python

Comme nous en avons discuté, nous utiliserons BeautifulSoup pour supprimer un site Web. Dans ce tutoriel, nous allons gratter le données historiques d'Ethereum de Coingecko et enregistrez les données de la table dans un fichier JSON. Passons à la construction du grattoir.

La première étape consiste à installer BeautifulSoup et Requests. Pour ce tutoriel, j'utiliserai Pipenv. Pipenv est un gestionnaire d'environnement virtuel pour Python. Vous pouvez aussi utiliser Venv si vous voulez, mais je préfère Pipenv. Discuter de Pipenv dépasse le cadre de ce didacticiel. Mais si vous voulez savoir comment Pipenv peut être utilisé, suivez ce guide. Ou, si vous voulez comprendre les environnements virtuels Python, suivez ce guide.

Lancez le shell Pipenv dans votre répertoire de projet en exécutant la commande pipenv shell. Il lancera un sous-shell dans votre environnement virtuel. Maintenant, pour installer BeautifulSoup, exécutez la commande suivante :

pipenv install beautifulsoup4

Et, pour installer des requêtes, exécutez la commande similaire à celle ci-dessus :

pipenv install requests

Une fois l'installation terminée, importez les packages nécessaires dans le fichier principal. Créer un fichier nommé main.py et importez les packages comme ci-dessous :

from bs4 import BeautifulSoup
import requests
import json

L'étape suivante consiste à obtenir le contenu de la page de données historiques et à les analyser à l'aide de l'analyseur HTML disponible dans BeautifulSoup.

r = requests.get('https://www.coingecko.com/en/coins/ethereum/historical_data#panel')

soup = BeautifulSoup(r.content, 'html.parser')

Dans le code ci-dessus, la page est accessible en utilisant le get méthode disponible dans la bibliothèque des requêtes. Le contenu analysé est ensuite stocké dans une variable appelée soup.

La partie de grattage d'origine commence maintenant. Tout d'abord, vous devrez identifier correctement la table dans le DOM. Si vous ouvrez cette page et inspectez-le à l'aide des outils de développement disponibles dans le navigateur, vous verrez que la table contient ces classes table table-striped text-sm text-lg-normal.

Coingecko
Tableau de données historiques de Coingecko Ethereum

Pour cibler correctement ce tableau, vous pouvez utiliser le find méthode.

table = soup.find('table', attrs={'class': 'table table-striped text-sm text-lg-normal'})

table_data = table.find_all('tr')

table_headings = []

for th in table_data[0].find_all('th'):
    table_headings.append(th.text)

Dans le code ci-dessus, d'abord, la table est trouvée en utilisant le soup.find méthode, puis en utilisant la find_all méthode, tout tr les éléments à l'intérieur du tableau sont recherchés. Ces tr les éléments sont stockés dans une variable appelée table_data. Le tableau comporte quelques th éléments pour le titre. Une nouvelle variable appelée table_headings est initialisé pour conserver les titres dans une liste.

Une boucle for est ensuite exécutée pour la première ligne du tableau. Dans cette ligne, tous les éléments avec th sont recherchés et leur valeur de texte est ajoutée à la table_headings liste. Le texte est extrait à l'aide de text méthode. Si vous imprimez le table_headings maintenant, vous pourrez voir la sortie suivante :

['Date', 'Market Cap', 'Volume', 'Open', 'Close']

L'étape suivante consiste à gratter le reste des éléments, à générer un dictionnaire pour chaque ligne, puis à ajouter les lignes dans une liste.

for tr in table_data:
    th = tr.find_all('th')
    td = tr.find_all('td')

    data = {}

    for i in range(len(td)):
        data.update({table_headings[0]: th[0].text})
        data.update({table_headings[i+1]: td[i].text.replace('\n', '')})

    if data.__len__() > 0:
        table_details.append(data)

C'est la partie essentielle du code. Pour chaque tr dans le table_data variable, premièrement, la th les éléments sont recherchés. La th éléments sont la date indiquée dans le tableau. Ces th les éléments sont stockés dans une variable th. De même, tous les td les éléments sont stockés dans le td variable.

Un dictionnaire vide data est initialisé. Après l'initialisation, nous parcourons la plage de td éléments. Pour chaque ligne, d'abord, nous mettons à jour le premier champ du dictionnaire avec le premier élément de th. Le code table_headings[0]: th[0].text attribue une paire clé-valeur de date et le premier th élément.

Après avoir initialisé le premier élément, les autres éléments sont affectés à l'aide de data.update({table_headings[i+1]: td[i].text.replace('\\n', '')}). Ici, td le texte des éléments est d'abord extrait à l'aide de la text méthode, et puis tout \\n est remplacé à l'aide de replace méthode. La valeur est alors affectée au i+1l'élément de table_headings liste parce que le ième élément est déjà affecté.

Ensuite, si le data la longueur du dictionnaire dépasse zéro, nous ajoutons le dictionnaire au table_details liste. Vous pouvez imprimer le table_details liste à vérifier. Mais nous allons écrire les valeurs dans un fichier JSON. Jetons un coup d'œil au code pour cela,

with open('table.json', 'w') as f:
    json.dump(table_details, f, indent=2)
    print('Data saved to json file...')

Nous utilisons le json.dump méthode ici pour écrire les valeurs dans un fichier JSON appelé table.json. Une fois l'écriture terminée, nous imprimons Data saved to json file... dans la console.

Maintenant, exécutez le fichier en utilisant la commande suivante,

python run main.py

Après un certain temps, vous pourrez voir le texte Données enregistrées dans le fichier JSON… dans la console. Vous verrez également un nouveau fichier appelé table.json dans le répertoire des fichiers de travail. Le fichier ressemblera au fichier JSON suivant :

[
  {
    "Date": "2022-11-27",
    "Market Cap": "$145,222,050,633",
    "Volume": "$5,271,100,860",
    "Open": "$1,205.66",
    "Close": "N/A"
  },
  {
    "Date": "2022-11-26",
    "Market Cap": "$144,810,246,845",
    "Volume": "$5,823,202,533",
    "Open": "$1,198.98",
    "Close": "$1,205.66"
  },
  {
    "Date": "2022-11-25",
    "Market Cap": "$145,091,739,838",
    "Volume": "$6,955,523,718",
    "Open": "$1,204.21",
    "Close": "$1,198.98"
  },
// ...
// ... 
]

Vous avez implémenté avec succès un grattoir Web à l'aide de Python. Pour voir le code complet, vous pouvez visiter ce GitHub repo.

Conclusion

Cet article a expliqué comment vous pouvez implémenter un simple scrape Python. Nous avons discuté de la manière dont BeautifulSoup pourrait être utilisé pour extraire rapidement des données du site Web. Nous avons également discuté d'autres bibliothèques disponibles et des raisons pour lesquelles Python est le premier choix de nombreux développeurs pour le scraping de sites Web.

Vous pouvez également consulter ces cadres de scraping Web.

Merci à nos commanditaires
Plus de bonnes lectures sur Crypto
Alimentez votre entreprise
Certains des outils et services pour aider votre entreprise à se développer.
  • Invicti utilise Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, moteur de recherche et tout ce dont vous avez besoin pour collecter des données Web.
    Essayez Brightdata
  • Semrush est une solution de marketing numérique tout-en-un avec plus de 50 outils de référencement, de médias sociaux et de marketing de contenu.
    Essayez Semrush
  • Intruder est un scanner de vulnérabilités en ligne qui détecte les failles de cybersécurité de votre infrastructure, afin d'éviter des violations de données coûteuses.
    Essayez Intruder