Scraper des sites statiques et dynamiques avec Python et ProxyScrape API

Guides, Python, Les différences, Mai-05-20245 minutes de lecture

Dans un monde de plus en plus dépendant des données, la capacité à collecter et à analyser de grandes quantités d'informations peut donner aux entreprises et aux professionnels un avantage concurrentiel significatif. Le web scraping, qui consiste à extraire des données de sites web, est un outil puissant dans l'arsenal des analystes de données, des développeurs web, des spécialistes du marketing numérique et des programmeurs Python. Ce guide vous fait découvrir les techniques de base et avancées du Web Scraping, met en évidence les meilleures pratiques et présente l' API Web Scraping de ProxyScrape en tant que solution flexible pour les sites Web statiques et dynamiques.

Déterminer si un site web est statique ou dynamique

Pour déterminer si un site web est statique ou dynamique :

  • Inspecter la source de la page : Cliquez avec le bouton droit de la souris et sélectionnez "Voir la source de la page". Si tout le contenu est visible et correspond à ce qui est affiché sur la page, il s'agit probablement d'une page statique.
  • Utilisez les outils de développement du navigateur : Ouvrez les outils de développement en cliquant avec le bouton droit de la souris sur la page et en sélectionnant "Inspecter", puis regardez l'onglet "Réseau" pendant que vous interagissez avec la page. Si de nouvelles demandes de réseau sont faites en réponse aux interactions, il s'agit probablement d'un site dynamique.
  • Désactiver JavaScript : Essayez de désactiver JavaScript dans les paramètres de votre navigateur et rechargez la page. Si la page ne fonctionne plus correctement ou affiche très peu de contenu, il est probable qu'elle s'appuie sur JavaScript pour la recherche et le rendu des données, ce qui indique qu'elle est de nature dynamique.

Ces méthodes ne représentent que quelques moyens de déterminer si un site web est statique ou dynamique. Bien qu'il existe d'autres stratégies, nous avons analysé et identifié ces techniques qui, selon nous, sont largement utilisées et efficaces.

Scraping de sites web statiques avec Requests et BeautifulSoup

Pour récupérer du contenu statique, Python offre des bibliothèques robustes telles que `requests` pour faire des requêtes HTTP et `BeautifulSoup` pour analyser des documents HTML et XML. Voici un exemple simple :

  • Faire une requête : Utilisez `requests` pour récupérer le contenu HTML de la page.
  • Analyse avec BeautifulSoup : Une fois que vous avez le contenu de la page, `BeautifulSoup` peut analyser et extraire des informations spécifiques.
import requests
from bs4 import BeautifulSoup

response = requests.get('http://example.com')

soup = BeautifulSoup(response.text, 'html.parser')

# Extraire les données souhaitées
data = soup.find_all('p')

Cette méthode est parfaite pour ceux qui débutent dans le web scraping. Elle est efficace pour les sites web dont le contenu est statique et ne nécessite qu'une configuration minimale.

Récupération de sites web dynamiques

Les sites web dynamiques présentent un défi différent. Ces sites chargent leur contenu de manière asynchrone à l'aide de JavaScript, ce qui signifie qu'un simple grattage HTML ne fonctionnera pas car les données ne sont pas présentes lors du chargement initial de la page.

Il y a deux façons d'aborder le scraping dynamique de sites web :

  • La première approche consiste à utiliser une bibliothèque d'automatisation de navigateur comme Playwright/Selenium pour obtenir le contenu, puis à l'analyser avec Beautifulsoup.
  • La seconde approche revient à jouer au détective avec l'onglet réseau pour repérer le point de terminaison utilisé par le site web pour récupérer ses données. Ensuite, il suffit d'utiliser le module "request" de Python pour récupérer ces données soi-même.

Naviguer sur des sites web dynamiques avec Playwright

Pour récupérer du contenu dynamique, des outils comme Playwright imitent l'interaction d'un utilisateur réel avec le navigateur, ce qui vous permet de récupérer des données chargées de manière dynamique. Voici un bref aperçu de l'utilisation de Playwright avec Python :

  • Installation de Playwright : Installer le paquetage Playwright et l'outil de ligne de commande.
    - "pip install playwright"
    - "playwright install"
  • Utiliser Playwright pour simuler des interactions : Écrire un script qui navigue sur le site Web et interagit avec lui si nécessaire pour déclencher le chargement d'un contenu dynamique.
from playwright.sync_api import sync_playwright


si __name__ == '__main__':

   with sync_playwright() as p :

       browser = p.chromium.launch(headless=True)

      page = browser.new_page()

      page.goto('https://www.scrapethissite.com/pages/ajax-javascript/')

      # Simuler les interactions ici

      page.click('//*[@id="2014"]')

      # Extraire le contenu dynamique

       content = page.inner_text('//*[@id="oscars"]/div/div[5]/div/table')

      print(content)

       browser.close()

Analyse du tableau de bord du réseau pour obtenir les points de terminaison de l'API :

  • Ouvrir les outils de développement
    a. Ouvrez le site web qui vous intéresse dans votre navigateur.
    b. Faites un clic droit n'importe où sur la page et sélectionnez Inspecter ou appuyez sur Ctrl+Shift+I (Cmd+Option+I sur Mac) pour ouvrir les outils de développement.
  • Inspecter l'onglet Réseau
    a. Cliquez sur l'onglet Réseau dans les outils de développement. C'est dans cet onglet que vous verrez toutes les requêtes réseau effectuées par le site web.
    b. Rafraîchissez la page pour commencer à capturer le trafic dès le début.
  • Filtrer et identifier les requêtes AJAX
    a. Vous pouvez filtrer les requêtes en fonction de types tels que XHR (XMLHttpRequest), qui sont généralement utilisés pour les requêtes AJAX.
    b. Interagissez avec la page, par exemple en cliquant sur des boutons, en remplissant des formulaires ou en faisant défiler la page, pour déclencher le chargement dynamique du contenu.
    c. Observez les requêtes réseau qui s'affichent lorsque vous effectuez ces actions. Recherchez les requêtes qui récupèrent les données qui vous intéressent.
  • Analyser la requête
    a. Cliquez sur une requête dans l'onglet Réseau qui semble récupérer les données dont vous avez besoin.
    b. Consultez la section En-têtes pour voir la méthode de requête (GET, POST, etc.), l'URL et d'autres en-têtes.
  • Répliquer la demande à l'aide de Python
    a. Utilisez les informations de l'onglet En-têtes pour reproduire la requête à l'aide de la bibliothèque de requêtes de Python. Voici un exemple de base de la manière dont vous pourriez procéder :
import requests

# URL from the AJAX request
url = 'https://example.com/api/data'

# Any headers you observed that are necessary, like user-agent, authorization tokens, etc.
headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36,gzip(gfe)',
    'Authorization': 'Bearer token_if_needed'
}

# If it's a POST request, you might also need to send data
data = {
    'example_key': 'example_value'
}

# Replace 'get' with 'post' if the request type is POST
response = requests.get(url, headers=headers, data=data if 'post' in locals() else None)

# To view the response
print(response.json()) 

Utilisation d'une API de balayage Web pour les deux scénarios

Si la maîtrise des requêtes et de Playwright ou de toute autre bibliothèque client Http peut être gratifiante, elle nécessite du temps et des efforts pour être traitée correctement. Une autre approche consiste à tirer parti d'une API de scraping Web qui fait abstraction de la complexité des tâches de scraping. Non seulement elle gère l'envoi de requêtes HTTP pour vous, mais elle fournit également une assistance avec des techniques anti-ban pour éviter d'être bloqué par certains sites web.

Présentation de ProxyScrape's Web Scraping API

ProxyScrape propose une API d'extraction de données Web qui simplifie l'extraction de données à partir de sites Web statiques et dynamiques.

Les caractéristiques de l'API sont les suivantes

  • Intégration facile avec des sites dynamiques et statiques.
  • Prise en charge complète des différents types d'activités de "web scraping".
  • Vaste réserve d'adresses IP
  • Offre jusqu'à 100 000 requêtes gratuites, permettant aux utilisateurs d'explorer et de réaliser le plein potentiel de l'API sans investissement immédiat.
  • Technologie anti-ban sophistiquée, conçue pour les sites web connus pour leurs difficultés en matière de scraping.
  • Les actions permettent de contrôler avec précision le moment de la réception des données du site web. Il peut s'agir d'attendre une demande d'URL particulière, d'anticiper l'apparition d'un élément sur le site, d'effectuer des activités après le défilement, etc. L'utilisation des

ProxyScrape Web Scraping API avec un site web statique :

Il s'agit d'une illustration de la manière dont vous pouvez incorporer notre API de scraping web dans vos scripts Python pour les sites web statiques, ou pour appeler un point de terminaison API que vous avez extrait du panneau d'inspection de votre navigateur :

import requests
import base64
import json

data = {
    "url": "https://books.toscrape.com/",
    "httpResponseBody": True
}

headers = {
    'Content-Type': 'application/json',
    'X-Api-Key': 'YOUR_API_KEY'
}

response = requests.post('https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request', headers=headers, json=data)

if response.status_code == 200:
    json_response = response.json()
    if 'browserHtml' in json_response['data']:
        print(json_response['data']['browserHtml'])
    else:
        print(base64.b64decode(json_response['data']['httpResponseBody']).decode())
else:
    print("Error:", response.status_code)

ProxyScrape Web Scraping API avec un site web dynamique :

Voici un exemple où nous attendons que le favicon commence à se charger. C'est généralement la dernière requête à démarrer sur le site de test que nous utilisons.

import requests
import json

url = 'https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request'

headers = {
    'Content-Type': 'application/json',
    'X-Api-Key': '<your api key>'  # Make sure to replace <your api key> with your actual API key
}

payload = {
    "url": "https://books.toscrape.com/",
    "browserHtml": True,
    "actions": [
        {
            "action": "waitForRequest",
            "urlPattern": "https://books.toscrape.com/static/oscar/favicon.ico",
            "urlMatchingOptions": "exact"
        }
    ]
}

response = requests.post(url, headers=headers, json=payload)

# Print the response from the server
print(response.text)  # Prints the response body as text

Bonnes pratiques en matière d'extraction de données sur le web

Quels que soient les outils ou les API que vous choisissez, le respect des conditions d'utilisation des sites web, la limitation du nombre de requêtes pour éviter les bannissements d'IP et l'utilisation de proxys pour le scraping anonyme sont des pratiques exemplaires essentielles. ProxyScrape Le site proxys ne se contente pas de fournir des adresses premium, résidentielles, mobiles et dédiées pour répondre à ces besoins, il encourage également le web scraping éthique.

Conclusion

  • Que vous vous intéressiez au web scraping en tant que hobby ou que vous l'intégriez dans votre boîte à outils professionnelle, il est essentiel de comprendre la distinction entre les sites web statiques et dynamiques et de savoir comment scraper efficacement les uns et les autres. En combinant des bibliothèques Python telles que Requests et Playwright/Selenium avec Beautifulsoup, vous êtes équipé pour relever vos défis en matière de web scraping.
  • Si vos scripts de scraping sont détectés comme des bots et donc bloqués, ou si vous souhaitez optimiser et simplifier votre processus d'envoi de requêtes, envisagez d'explorer notre API de scraping web. Elle est conçue pour gérer efficacement ces problèmes en votre nom.
  • N'oubliez pas que l'avenir du web scraping est prometteur et qu'en respectant les meilleures pratiques et en utilisant des outils de pointe, vous pouvez débloquer un monde de données qui n'attendent que d'être découvertes.

Prêt à vous lancer dans l'aventure du web scraping ? Inscrivez-vous à ProxyScrape dès aujourd'hui et explorez les possibilités infinies du web grâce à notre site dédié proxys, notre site résidentiel proxys, et notre API de scraping web complète.