Introduction
Le web scraping est un outil puissant qui vous permet d'extraire des données de sites web et de les utiliser à des fins diverses. Il peut servir à collecter des données pour l'analyse décisionnelle, à suivre les modifications apportées aux sites web ou à créer vos propres applications web. Dans cet article, nous nous intéresserons à la manière d'extraire des tableaux JavaScript à l'aide de Python.
Que sont les tableaux JavaScript ?
Les tableaux JavaScript constituent un moyen courant d'afficher des données sous forme de tableaux sur le Web, et on les trouve sur un large éventail de sites Web. Le scraping de ces tableaux peut s'avérer difficile, car les données sont souvent intégrées dans le code source de la page sous forme d'objet JavaScript, plutôt que dans un tableau HTML standard. Cependant, avec les bons outils et les bonnes techniques, il est possible d'extraire ces données à l'aide de Python.
Nous commencerons par configurer les outils nécessaires et installer les bibliothèques requises. Ensuite, nous passerons en revue le processus consistant à utiliser Python et un pilote Web pour charger la page Web et extraire les données du tableau. Enfin, nous aborderons certaines méthodes pour améliorer l'efficacité et la fiabilité du processus d'extraction, et expliquerons pourquoi il peut être préférable d'utiliser un outil d'extraction professionnel pour les tâches plus complexes.
Configuration
Avant de pouvoir commencer à extraire des tableaux JavaScript avec Python, il y a deux conditions préalables à remplir :
- Python : ce tutoriel part du principe que Python est installé sur votre ordinateur. Si ce n'est pas le cas, vous pouvez le télécharger depuis le site officiel et suivre les instructions correspondant à votre système d'exploitation.
- Un pilote Web : afin de charger des pages Web et d'interagir avec elles à l'aide de Python, nous devrons utiliser un pilote Web. Plusieurs options sont disponibles, telles que ChromeDriver, FirefoxDriver et SafariDriver. Pour ce tutoriel, nous utiliserons ChromeDriver.
Une fois Python et un pilote Web installés, vous devrez installer les bibliothèques suivantes :
- Selenium : Selenium est une bibliothèque qui vous permet de contrôler un navigateur web via Python. Nous l'utiliserons pour charger la page web contenant le tableau et interagir avec celle-ci. En ce qui concerne les tableaux JavaScript, il est important d'utiliser une bibliothèque comme Selenium plutôt que Python requests, car cela vous permet d'attendre qu'un élément généré par JavaScript apparaisse sur la page au cas où il ne serait pas présent lors du chargement de la page.
- Pandas : Pandas est une bibliothèque qui fournit des structures de données et des outils d'analyse de données faciles à utiliser pour Python. Nous l'utiliserons pour stocker et manipuler les données que nous extrayons du tableau.
Pour installer ces bibliothèques, ouvrez un terminal ou une invite de commande et utilisez la commande pip pour les installer :
$ pip install selenium pandas
Et voilà ! Vous êtes désormais prêt à commencer à extraire des tableaux JavaScript avec Python. Dans la section suivante, nous allons passer en revue le processus étape par étape.
Commençons l'extraction
Maintenant que tous les outils nécessaires sont installés, il est temps de commencer à extraire des données de tableaux JavaScript avec Python. Le processus comprend les étapes suivantes
- Chargez la page web contenant le tableau à l'aide de Selenium et d'un pilote web.
- Extraire les données du tableau à l'aide de Selenium et de Python.
- Stockez et manipulez les données à l'aide de Pandas.
Passons en revue chacune de ces étapes plus en détail :
Étape 1 : Chargement de la page web
La première chose à faire est de charger la page web contenant le tableau que nous voulons extraire. Nous pouvons le faire à l'aide de Selenium et d'un pilote web.
Commençons par importer les bibliothèques nécessaires :
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
Ensuite, nous allons créer une instance du pilote Web et l'utiliser pour charger la page Web :
# Replace "path/to/chromedriver" with the path to your ChromeDriver executable
driver = webdriver.Chrome(service=Service('path/to/chromedriver'))
# Load the webpage
driver.get('https://html.com/tags/table/')
Il est important de noter que la page web doit être entièrement chargée avant d'extraire les données du tableau. Vous devrez peut-être utiliser la fonction driver.implicitly_wait() pour attendre que la page se charge, ou utiliser la fonction driver.find_element(By.*, ‘’) pour attendre qu'un élément spécifique de la page soit chargé.
Étape 2 : Extraire les données
Une fois la page Web chargée, nous pouvons utiliser Selenium pour extraire les données du tableau. Il existe plusieurs façons de procéder, mais l’une d’entre elles consiste à utiliser la fonction driver.find_elements(By.CSS_SELECTOR, ‘td’) pour localiser les cellules du tableau et extraire le texte de chaque cellule.
Voici un exemple illustrant comment extraire les données d’un tableau simple à deux colonnes :
# Find all of the rows in the table
rows = driver.find_elements(By.CSS_SELECTOR, 'table tr')
# For each row, find the cells and extract the text
for row in rows:
try:
cells = row.find_elements(By.CSS_SELECTOR, 'td') or row.find_elements(By.CSS_SELECTOR, 'th')
except:
continue
for cel in cells:
print(cel.text, end= " ")
print()
driver.quit()
N'oubliez pas que vous devrez peut-être utiliser un sélecteur CSS différent en fonction de la structure du tableau et des éléments qu'il contient. Vous pouvez utiliser les outils de développement de votre navigateur Web pour inspecter la page et trouver le sélecteur approprié.
Étape 3 : Stocker et manipuler les données
Une fois que vous avez extrait les données du tableau, vous pouvez les stocker dans un dataframe Pandas et les manipuler selon vos besoins. Voici un exemple de la manière de procéder :
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
import pandas as pd
df = pd.DataFrame()
driver = webdriver.Chrome(service=Service('/path/to/chromedriver'))
# Use the webdriver to load a webpage
driver.get('https://html.com/tags/table/')
# When scraping JavaScript generated content it is important to wait a few seconds
time.sleep(4)
table = driver.find_element(By.CSS_SELECTOR, 'table')
# For each row, find the cells and extract the text
df = pd.read_html(table.get_attribute('outerHTML'))
print(df)
driver.close()Aller plus loin
Bien que les étapes décrites ci-dessus vous permettent d'extraire des tableaux JavaScript à l'aide de Python, il existe plusieurs moyens d'améliorer l'efficacité et la fiabilité du processus.
Une façon d'améliorer l'efficacité consiste à utiliser un navigateur sans interface graphique (headless browser), c'est-à-dire un navigateur qui s'exécute en arrière-plan sans interface graphique. Cela peut être plus rapide que d'exécuter un navigateur complet, et cela consomme moins de ressources. Pour utiliser un navigateur sans interface graphique avec Selenium, vous pouvez utiliser l'option --headless lors de la création de l'instance du pilote Web.
Une autre façon d'améliorer l'efficacité consiste à utiliser un service fournissant des adresses IP tournantes, tel qu'un serveur proxy. Cela peut vous aider à éviter d'être détecté comme un scraper et bloqué par le site web, car l'adresse IP de la requête semblera changer à chaque requête. WebScrapingAPI est un service qui offre la possibilité de scraper un site web à l'aide d'un serveur proxy. Pour en savoir plus sur l'utilisation des proxys pour le web scraping, n'hésitez pas à consulter notre documentation.
Pour utiliser un serveur proxy avec Selenium, je vous recommande vivement d'utiliser selenium-wire, car il est plus simple que Selenium seul lorsqu'il s'agit de se connecter à un serveur proxy. Comme n'importe quel autre package Python, vous pouvez l'installer simplement en exécutant la commande suivante :
$ pip install selenium-wire
Vous pouvez ensuite utiliser l'exemple de code suivant pour utiliser un serveur proxy avec Selenium :
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
import time
# Create a webdriver instance with the desired proxy server and authentication details
API_KEY = '<YOUR-API-KEY-HERE>'
options = {
'proxy': {
'http': f'http://webscrapingapi:{API_KEY}@proxy.webscrapingapi.com:80',
'https': f'https://webscrapingapi:{API_KEY}@proxy.webscrapingapi.com:80',
'no_proxy': 'localhost,127.0.0.1'
}
}
driver = webdriver.Chrome(service=Service('/path/to/chromedriver'), seleniumwire_options=options)
# Use the webdriver to load a webpage
driver.get('http://httpbin.org/ip')
# When scraping JavaScript generated content it is important to wait a few seconds
time.sleep(5)
# Do something with the page, such as extract data or take a screenshot
# ...
# Close the webdriver
driver.quit()
Bien que ces techniques puissent être utiles pour améliorer l'efficacité et la fiabilité de votre web scraping, il est important de noter qu'elles dépassent le cadre de cet article. Pour des tâches de scraping plus complexes, il peut être plus efficace et plus fiable d'utiliser un scraper professionnel, tel que WebScrapingAPI. Cet outil offre des fonctionnalités supplémentaires, telles que la rotation d'IP et le contournement des CAPTCHA, qui peuvent rendre le processus de scraping bien plus simple et plus fiable.
Dans la section suivante, nous résumerons les étapes du scraping de tableaux JavaScript avec Python et discuterons des avantages de l'utilisation d'un scraper professionnel pour les tâches plus complexes.
Résumé
En conclusion, le scraping de tableaux JavaScript avec Python est un moyen puissant d'extraire des données de sites web et de les utiliser à des fins diverses. Que vous utilisiez votre propre code ou un scraper professionnel, cette technique peut s'avérer un outil précieux pour collecter des données et obtenir des informations utiles.




