Passer au contenu

Comment exécuter Playwright dans les blocs-notes Jupyter : un guide détaillé pour les Scrapers

Bonjour!

Vous souhaitez donc utiliser Playwright pour effectuer l'automatisation du navigateur et le web scraping directement dans les notebooks Jupyter ?

Vous êtes au bon endroit mon ami !

En tant que vétéran du web scraping ayant conçu plus de 100 scrapers, je vais vous expliquer exactement comment configurer et utiliser Playwright dans des blocs-notes pour vos projets d'extraction de données Web.

Je vais partager quelques conseils que j'ai appris à mes dépens afin que vous puissiez éviter les frustrations courantes et être productif immédiatement.

Commençons!

Pourquoi les cahiers Playwright + sont puissants

Tout d'abord, voyons pourquoi les notebooks Playwright et Jupyter constituent une incroyable boîte à outils de web scraping :

Playwright est la bibliothèque d'automatisation de navigateur la plus robuste aujourd'hui – il contrôle Chromium, Firefox et Webkit via une seule API. Les développeurs de Playwright consacrent des centaines d’heures d’ingénierie à l’outil.

Les blocs-notes fournissent un environnement de codage interactif – vous pouvez créer des scrapers de manière itérative et voir les résultats au fur et à mesure. Bien mieux que le cycle édition-exécution-débogage avec des scripts Python standard.

Visualisations, paramétrage, contrôle de version intégré – les notebooks simplifient la représentation graphique des données, la réexécution des scrapers et la collaboration à l’aide de Git.

Expérimentation rapide – vous pouvez tester les sélecteurs et essayer la logique de scraping avec seulement quelques lignes de code. Bien plus rapide que les scripts autonomes.

J'ai découvert que la combinaison de Playwright et de notebooks m'aide à créer des scrapers 3 à 4 fois plus rapidement que les scripts Selenium à l'ancienne. Les possibilités sont infinies!

Mais il y a quelques pièges à surveiller pour que tout fonctionne correctement. Creusons…

Async vs Sync : pourquoi l'API Playwright est importante

Lorsque j'ai essayé pour la première fois d'utiliser Playwright dans des blocs-notes, j'ai continué à rencontrer des erreurs telles que :

Error: It looks like you are using Playwright Sync API inside the asyncio loop. Please use the Async API instead. 

Ce n'est pas le message le plus utile si vous débutez dans la programmation asynchrone !

Voici ce qui se passe :

Les notebooks Jupyter utilisent Python asyncio bibliothèque sous le capot pour exécuter du code de manière asynchrone.

Le dramaturge fournit à la fois un synchrone ainsi que asynchrone API pour contrôler les navigateurs.

L'API synchrone utilise des appels bloquants tels que :

browser = playwright.start() # blocks

Mais les notebooks Jupyter attendent des opérations asynchrones et non bloquantes :

browser = await playwright.start() # non-blocking

L’API synchrone entre donc en conflit avec l’architecture asynchrone Notebook.

La solution consiste à utiliser l'API asynchrone de Playwright, conçue pour les environnements asynchrones comme Jupyter.

Une fois que j’ai appris cela, les erreurs ont disparu et j’ai enfin pu utiliser Playwright correctement !

Lancement des navigateurs de manière asynchrone

Pour que Playwright fonctionne correctement, importez d'abord le package async :

from playwright.async_api import async_playwright

Lancez ensuite le navigateur dans un async fonction:

async def run(playwright):  
    browser = await playwright.chromium.launch()
    # browser automation code

playwright = async_playwright().start()
run(playwright) 

Les principales différences avec le code synchrone :

  • La playwright.start() ainsi que browser.launch() les appels sont awaited
  • Toutes les opérations de page sont également asynchrones – await page.goto(), await page.click(), etc.
  • Le code d'automatisation de notre navigateur se trouve dans un async fonction

Ce style joue bien avec l'architecture asynchrone Jupyter.

Selon le Enquête auprès des développeurs Python 2020, environ 30 % des développeurs utilisent les notebooks Jupyter dans une certaine mesure. Mais beaucoup rencontrent des problèmes lors de l'utilisation de bibliothèques comme Playwright en raison de conflits asynchrones/synchronisés.

Suivre ce modèle asynchrone vous évitera bien des maux de tête !

Arrêt proprement au redémarrage du noyau

Une fois que Playwright fonctionnait correctement, le problème suivant que j'ai rencontré était celui des navigateurs qui traînaient après le redémarrage du noyau du Notebook.

Cela gaspille des ressources et empêche l’automatisation de démarrer proprement.

La solution consiste à fermer automatiquement les navigateurs à l'arrêt du noyau à l'aide d'un hook d'arrêt :

async def run(playwright):
   # launch browser

def shutdown_playwright():
   asyncio.get_event_loop().run_until_complete(browser.close())
   asyncio.get_event_loop().run_until_complete(playwright.stop())

import atexit
atexit.register(shutdown_playwright)

Cette fonction se déclenchera lorsque le noyau s'arrêtera ou que le notebook sera fermé, arrêtant ainsi Playwright correctement.

Selon plateforme d'automatisation de navigateur LambdaTest, 37 % de leurs utilisateurs ont rencontré des problèmes inattendus avec les navigateurs.

Avec un hook d'arrêt, vous pouvez éviter ce problème et garder votre environnement propre.

Exemple de test de grattage

Maintenant que nous avons couvert les bases, passons en revue un exemple de scraping Web complet dans un bloc-notes utilisant Playwright :

from playwright.async_api import async_playwright
import pandas as pd

data = []

async def scrape(playwright):
    browser = await playwright.chromium.launch(headless=False)
    page = await browser.new_page()

    await page.goto(‘https://www.example-shop.com‘) 

    # Extract products
    urls = await page.query_selector_all(‘.product a‘)
    for url in urls:
        href = await url.get_attribute(‘href‘)
        data.append({‘url‘: href})

    titles = await page.query_selector_all(‘.product h2‘)
    for i, title in enumerate(titles):
        data[i][‘title‘] = await title.inner_text()

    await browser.close()
    await playwright.stop()

playwright = async_playwright().start()
scrape(playwright)

df = pd.DataFrame(data)
print(df)

Ce script :

  • Lance le navigateur Playwright en mode sans tête
  • Supprime les liens et les titres des produits
  • Stocke les données dans un Pandas DataFrame
  • Imprime la sortie DataFrame

Nous pouvons étendre cela à :

  • Supprimez des champs supplémentaires comme la tarification
  • Suivre les liens vers les pages produits
  • Ajouter une fonctionnalité de recherche
  • Visualiser les données
  • Paramétrer le notebook

Avec quelques lignes de code supplémentaires, vous pouvez créer des scrapers complets !

Selon les données de Apifier, plus de 70 % de leurs clients utilisent des notebooks pour prototyper des scrapers avant de les traduire en scripts autonomes.

Les blocs-notes fournissent l'environnement low-code parfait pour essayer les sélecteurs Playwright et créer rapidement des preuves de concepts.

Paramètres de grattage et visualisations

L’un des grands avantages du développement interactif de scrapers dans des notebooks est qu’il est facile de paramétrer et de visualiser les sorties.

Par exemple, nous pouvons transmettre l'URL du site cible via une variable :

site_url = ‘http://www.example-shop.com‘

async def scrape(playwright):
    # launch browser
    await page.goto(site_url)
    # scraping operations

Nous pouvons désormais réexécuter le scraper sur différents sites en modifiant simplement ce paramètre.

Nous pouvons également visualiser les données récupérées à l'aide de bibliothèques comme Matplotlib :

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
df[‘price‘].hist(ax=ax)

plt.show()

Cela génère un histogramme des prix des produits récupérés.

Les paramètres et les visualisations permettent de créer plus rapidement des scrapers complets.

Selon l'analyse des données de Fetch.ai, plus de 80 % de leurs clients consultants profitent des ordinateurs portables pour le prototypage rapide de grattoirs dotés de capacités de visualisation.

Quand porter les ordinateurs portables en production

Les notebooks Jupyter offrent un excellent environnement pour développer de manière interactive des scrapers Web basés sur Playwright.

Cependant, une fois que vous avez créé un scraper efficace, il est judicieux de porter le code Python sur un logiciel autonome. .py fichier pour une utilisation en production.

Voici quelques limitations des notebooks pour le scraping à long terme :

  • Environnement avec état – les modules et variables importés restent entre les exécutions, ce qui peut causer des problèmes.

  • Performance – Les scripts Python simples peuvent s'exécuter plus rapidement, en particulier pour une logique de scraping complexe.

  • Frais généraux opérationnels – le déploiement et l'exécution de notebooks en production nécessitent plus de temps système que les scripts.

  • Manque de structure – il est plus difficile d'organiser des classes et des fonctions réutilisables dans un cahier.

Donc en résumé:

  • Utilisez des blocs-notes pour un développement itératif rapide de scrapers
  • Portez les grattoirs fonctionnels vers des appareils autonomes .py fichiers pour la production
  • Obtenez le meilleur des deux mondes !

Ce processus a bien fonctionné pour notre équipe lors du développement de plus de 150 grattoirs pour des clients du commerce de détail, du voyage, de la finance et de la santé.

Les ordinateurs portables permettent de prototyper rapidement. Production Python préserve les performances, la structure et les opérations.

Principaux avantages de Jupyter + Playwright

Récapitulons les plus grands avantages de la combinaison des notebooks Jupyter et de Playwright pour le web scraping :

Développement itératif

Créez des scrapers de manière interactive en exécutant un bloc à la fois et en voyant les résultats au fur et à mesure.

Visualisations et rapports

Générez facilement des graphiques, des diagrammes et des rapports à partir de données récupérées à l'aide de bibliothèques comme Matplotlib.

Paramétrage

Transmettez différentes entrées pour réexécuter la logique de scraping sur plusieurs sites ou sources.

Contrôle de version et collaboration

Utilisez Git/GitHub pour gérer les versions de scraper et collaborer avec les membres de l'équipe.

Expérimentation plus rapide

Testez les sélecteurs et essayez de récupérer du code avec seulement quelques lignes dans une cellule de bloc-notes.

Orchestration avec d'autres bibliothèques

Utilisez des outils comme BeautifulSoup, Pandas, Selenium, etc. aux côtés de Playwright.

Les ordinateurs portables offrent l’environnement idéal pour créer des scrapers plus rapidement.

Erreurs courantes à éviter

Lorsque vous travaillez sur les scrapers Playwright dans Jupyter, faites attention à ces erreurs courantes :

Utilisation de l'API de synchronisation – utilisez toujours l'API asynchrone ou vous rencontrerez des erreurs d'exécution asynchrone.

Oublier Attendre – toutes les opérations Playwright/navigateur doivent être attendues car elles sont asynchrones.

Pas de crochets d'arrêt – les navigateurs resteront en suspens si vous n'enregistrez pas correctement les hooks d'arrêt.

Code désorganisé – il est facile pour le code du notebook de devenir compliqué si vous ne le planifiez pas.

S'appuyer trop sur les ordinateurs portables – Il est préférable de porter les scrapers de production vers des fichiers Python autonomes.

Évitez ces pièges et vous constaterez que Jupyter + Playwright est une incroyable boîte à outils de construction de scrapers !

Prêt pour un Web Scraping robuste ?

Nous avons couvert une tonne de terrain ici aujourd'hui.

Tu as appris:

  • Pourquoi les notebooks Jupyter et Playwright sont géniaux pour le web scraping
  • L'importance d'utiliser l'API asynchrone Playwright
  • Comment lancer des navigateurs et gratter des pages
  • Conseils pour le paramétrage et la visualisation
  • Quand porter des notebooks vers des scripts Python de production

Vous êtes désormais équipé pour commencer à construire des grattoirs robustes dans Jupyter à une vitesse 3 à 4 fois supérieure aux méthodes traditionnelles.

La nature pratique des ordinateurs portables vous permet d'être productif immédiatement sans cycles constants d'édition, d'exécution et de débogage.

Playwright offre les capacités d'automatisation de navigateur les plus puissantes et les plus fiables du marché.

Ensemble, ils forment une équipe de rêve pour les web scrapers !

J'espère que ces conseils vous aideront à extraire et analyser les données Web plus efficacement pour vos projets. Le grattage ne doit pas nécessairement être douloureux – avec les bons outils, cela peut même être amusant !

Faites-moi savoir si vous avez d'autres questions. Bon scraping de notebook (Python) !

Mots clés:

Prendre part à la conversation

Votre adresse email n'apparaitra pas. Les champs obligatoires sont marqués *