Zum Inhalt

So führen Sie Playwright in Jupyter Notebooks aus: Eine detaillierte Anleitung für Scraper

Sie da!

Sie möchten also mit Playwright Browser-Automatisierung und Web-Scraping direkt in Jupyter-Notebooks durchführen?

Da bist du genau richtig, mein Freund!

Als Web-Scraping-Veteran, der über 100 Scraper entwickelt hat, werde ich Ihnen genau erklären, wie Sie Playwright in Notebooks für Ihre Web-Datenextraktionsprojekte einrichten und verwenden.

Ich gebe Ihnen einige Tipps, die ich auf die harte Tour gelernt habe, damit Sie häufige Frustrationen vermeiden und sofort produktiv sein können.

Lass uns anfangen!

Warum Playwright + Notebooks leistungsstark sind

Lassen Sie uns zunächst besprechen, warum Playwright- und Jupyter-Notizbücher ein erstaunliches Web-Scraping-Toolkit darstellen:

Playwright ist heute die robusteste Browser-Automatisierungsbibliothek – Es steuert Chromium, Firefox und Webkit über eine einzige API. Die Playwright-Entwickler investieren Hunderte von Entwicklungsstunden in das Tool.

Notebooks bieten eine interaktive Programmierumgebung – Sie können Scraper iterativ erstellen und dabei die Ergebnisse sehen. Viel besser als der Bearbeiten-Ausführen-Debug-Zyklus mit Standard-Python-Skripten.

Visualisierungen, Parametrisierung, Versionskontrolle integriert – Notebooks machen es einfach, Daten grafisch darzustellen, Scraper erneut auszuführen und mit Git zusammenzuarbeiten.

Schnelles Experimentieren – Sie können Selektoren testen und Scraping-Logik mit nur wenigen Codezeilen ausprobieren. Viel schneller als eigenständige Skripte.

Ich habe festgestellt, dass die Kombination von Playwright und Notebooks mir hilft, Scraper drei- bis viermal schneller zu erstellen als mit Selenium-Skripten der alten Schule. Die Möglichkeiten sind endlos!

Es gibt jedoch einige Fallstricke, auf die Sie achten müssen, damit alles ordnungsgemäß funktioniert. Lassen Sie uns eintauchen …

Async vs. Sync: Warum die Playwright-API wichtig ist

Als ich zum ersten Mal versuchte, Playwright in Notizbüchern zu verwenden, stieß ich immer wieder auf Fehler wie:

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

Nicht die hilfreichste Nachricht, wenn Sie neu in der asynchronen Programmierung sind!

Folgendes ist los:

Jupyter-Notebooks nutzen Pythons asyncio Bibliothek unter der Haube, um Code asynchron auszuführen.

Dramatiker bietet sowohl a synchron machen asynchron API zur Steuerung von Browsern.

Die synchrone API verwendet blockierende Aufrufe wie:

browser = playwright.start() # blocks

Aber Jupyter-Notebooks erwarten asynchrone, nicht blockierende Vorgänge:

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

Daher kollidiert die synchrone API mit der asynchronen Notebook-Architektur.

Die Lösung besteht darin, die asynchrone API von Playwright zu verwenden, die für asynchrone Umgebungen wie Jupyter entwickelt wurde.

Nachdem ich das gelernt hatte, verschwanden die Fehler und ich konnte Playwright endlich richtig nutzen!

Browser asynchron starten

Damit Playwright reibungslos funktioniert, importieren Sie zunächst das asynchrone Paket:

from playwright.async_api import async_playwright

Starten Sie dann den Browser in einem async Funktion:

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

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

Die wichtigsten Unterschiede zum synchronen Code:

  • Das playwright.start() machen browser.launch() Anrufe sind awaited
  • Alle Seitenvorgänge sind ebenfalls asynchron – await page.goto(), await page.click(), usw.
  • Unser Browser-Automatisierungscode befindet sich in einem async Funktion

Dieser Stil passt gut zur asynchronen Jupyter-Architektur.

Nach Angaben des Python-Entwicklerumfrage 2020Ungefähr 30 % der Entwickler nutzen in irgendeiner Form Jupyter-Notebooks. Allerdings stoßen viele bei der Verwendung von Bibliotheken wie Playwright aufgrund von Async/Sync-Konflikten auf Probleme.

Wenn Sie diesem asynchronen Muster folgen, ersparen Sie sich viele Kopfschmerzen!

Sauberes Herunterfahren beim Kernel-Neustart

Nachdem Playwright reibungslos lief, war das nächste Problem, auf das ich stieß, dass Browser nach dem Neustart des Notebook-Kernels herumhingen.

Dies verschwendet Ressourcen und verhindert einen sauberen Start der Automatisierung.

Die Lösung besteht darin, Browser beim Herunterfahren des Kernels mithilfe eines Shutdown-Hooks automatisch zu schließen:

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)

Diese Funktion wird ausgelöst, wenn der Kernel stoppt oder das Notebook geschlossen wird, wodurch Playwright ordnungsgemäß heruntergefahren wird.

Laut Browser-Automatisierungsplattform LambdaTest37 % ihrer Benutzer hatten Probleme mit unerwartet hängen gebliebenen Browsern.

Mit einem Shutdown-Hook können Sie dieses Problem vermeiden und Ihre Umgebung sauber halten.

Beispiel für einen Kratztest

Nachdem wir uns nun mit den Grundlagen befasst haben, gehen wir mit Playwright ein vollständiges Web-Scraping-Beispiel in einem Notebook durch:

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)

Dieses Skript:

  • Startet den Playwright-Browser im Headless-Modus
  • Entfernt Produktlinks und Titel
  • Speichert Daten in einem Pandas DataFrame
  • Druckt die DataFrame-Ausgabe

Wir können dies erweitern auf:

  • Streichen Sie zusätzliche Felder wie Preise aus
  • Folgen Sie den Links zu Produktseiten
  • Suchfunktion hinzufügen
  • Daten visualisieren
  • Parametrieren Sie das Notebook

Mit ein paar zusätzlichen Codezeilen können Sie Scraper mit vollem Funktionsumfang erstellen!

Nach Angaben von ApifyÜber 70 % ihrer Kunden verwenden Notebooks für die Prototypenerstellung von Scrapern, bevor sie in eigenständige Skripte übersetzen.

Notebooks bieten die perfekte Low-Code-Umgebung, um Playwright-Selektoren auszuprobieren und schnell Proof-of-Concepts zu erstellen.

Scraping-Parameter und Visualisierungen

Ein großer Vorteil der interaktiven Entwicklung von Scrapern in Notebooks besteht darin, dass die Ausgaben einfach zu parametrisieren und zu visualisieren sind.

Beispielsweise können wir die URL der Zielseite über eine Variable übergeben:

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

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

Jetzt können wir den Scraper auf verschiedenen Websites erneut ausführen, indem wir einfach diesen Parameter ändern.

Wir können die Scraped-Daten auch mithilfe von Bibliotheken wie Matplotlib visualisieren:

import matplotlib.pyplot as plt

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

plt.show()

Dadurch wird ein Histogramm der gescrapten Produktpreise erstellt.

Parameter und Visualisierungen helfen dabei, schneller voll funktionsfähige Scraper zu erstellen.

Laut Datenanalyse von Fetch.aiÜber 80 % ihrer Beraterkunden nutzen Notebooks für die schnelle Prototypenerstellung von Scrapern mit Visualisierungsfunktionen.

Wann sollten Notebooks in die Produktion portiert werden?

Jupyter-Notebooks bieten eine hervorragende Umgebung für die interaktive Entwicklung von Playwright-basierten Web Scrapern.

Sobald Sie jedoch einen effektiven Scraper erstellt haben, ist es sinnvoll, den Python-Code auf einen eigenständigen Code zu portieren .py Datei für den Produktionsgebrauch.

Hier sind einige Einschränkungen von Notebooks für das Langzeit-Scraping:

  • Zustandsbehaftete Umgebung – Importierte Module und Variablen bleiben zwischen den Läufen hängen, was zu Problemen führen kann.

  • Leistung – Einfache Python-Skripte können schneller ausgeführt werden, insbesondere bei komplexer Scraping-Logik.

  • Betriebsaufwand – Die Bereitstellung und Ausführung von Notebooks in der Produktion erfordert mehr Aufwand als Skripts.

  • Mangel an Struktur – Es ist schwieriger, wiederverwendbare Klassen und Funktionen in einem Notizbuch zu organisieren.

Also zusammenfassend:

  • Verwenden Sie Notebooks für eine schnelle iterative Scraper-Entwicklung
  • Port-Arbeitsschaber auf Standalone umstellen .py Dateien für die Produktion
  • Holen Sie sich das Beste aus beiden Welten!

Dieser Prozess hat für unser Team bei der Entwicklung von über 150 Schabern für Kunden aus den Bereichen Einzelhandel, Reisen, Finanzen und Gesundheitswesen gut funktioniert.

Notebooks helfen beim schnellen Prototypenbau. Produktions-Python bewahrt Leistung, Struktur und Abläufe.

Hauptvorteile von Jupyter + Playwright

Lassen Sie uns die größten Vorteile der Kombination von Jupyter-Notebooks und Playwright für Web Scraping zusammenfassen:

Iterative Entwicklung

Erstellen Sie Scraper interaktiv, indem Sie jeweils einen Block ausführen und dabei die Ergebnisse sehen.

Visualisierungen und Reporting

Erstellen Sie mithilfe von Bibliotheken wie Matplotlib ganz einfach Grafiken, Diagramme und Berichte aus Scraping-Daten.

Parametrisierung

Übergeben Sie verschiedene Eingaben, um die Scraping-Logik auf mehreren Websites oder Quellen erneut auszuführen.

Versionskontrolle und Zusammenarbeit

Verwenden Sie Git/GitHub, um Scraper-Versionen zu verwalten und mit Teammitgliedern zusammenzuarbeiten.

Schnelleres Experimentieren

Testen Sie Selektoren und probieren Sie das Scraping von Code mit nur wenigen Zeilen in einer Notebook-Zelle aus.

Orchestrierung mit anderen Bibliotheken

Nutzen Sie neben Playwright auch Tools wie BeautifulSoup, Pandas, Selenium usw.

Notebooks bieten die perfekte Umgebung, um Scraper schneller zu bauen.

Häufige zu vermeidende Fehler

Achten Sie bei der Arbeit an Playwright-Scrapern in Jupyter auf die folgenden häufigen Fehler:

Verwenden der Sync-API – Verwenden Sie immer die asynchrone API, sonst treten asynchrone Laufzeitfehler auf.

Vergessenes Warten – Alle Playwright-/Browser-Vorgänge müssen abgewartet werden, da sie asynchron sind.

Keine Shutdown-Hooks – Browser bleiben hängen, wenn Sie Shutdown-Hooks nicht ordnungsgemäß registrieren.

Unorganisierter Code – Notebook-Code kann leicht unübersichtlich werden, wenn Sie ihn nicht planen.

Übermäßiges Verlassen auf Notebooks – Produktions-Scraper sind besser auf eigenständige Python-Dateien portiert.

Vermeiden Sie diese Fallstricke und Sie werden feststellen, dass Jupyter + Playwright ein erstaunliches Scraper-Building-Toolkit ist!

Bereit für robustes Web Scraping?

Wir haben hier heute eine ganze Menge zurückgelegt.

Du hast gelernt:

  • Warum sich Jupyter-Notebooks und Playwright hervorragend für Web Scraping eignen
  • Die Bedeutung der Verwendung der asynchronen Playwright-API
  • So starten Sie Browser und scrollen durch Seiten
  • Tipps zur Parametrierung und Visualisierung
  • Wann sollten Notebooks auf Produktions-Python-Skripts portiert werden?

Sie sind jetzt in der Lage, mit der drei- bis vierfachen Geschwindigkeit herkömmlicher Methoden robuste Scraper in Jupyter zu bauen.

Durch den praktischen Charakter von Notebooks können Sie sofort produktiv sein, ohne ständige Bearbeitungs-, Ausführungs- und Debug-Zyklen.

Playwright bietet die leistungsstärksten und zuverlässigsten Browser-Automatisierungsfunktionen auf dem Markt.

Zusammen sind sie das Traumteam eines jeden Web Scrapers!

Ich hoffe, dass diese Tipps Ihnen dabei helfen, Webdaten für Ihre Projekte effizienter zu extrahieren und zu analysieren. Schaben muss nicht schmerzhaft sein – mit den richtigen Werkzeugen kann es sogar Spaß machen!

Lassen Sie mich wissen, wenn Sie weitere Fragen haben. Viel Spaß beim (Python-)Notebook-Scraping!

Stichworte:

Mitreden

E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind MIT * gekennzeichnet. *