1. Einführung in dynamische Seiten
Wenn du jemals versucht hast, Daten von Websites zu scrapen, die ihren Inhalt dank JavaScript dynamisch laden, dann weißt du, dass das eine echte Herausforderung sein kann. Aber keine Sorge! Wie man so sagt, kann jeder komplexe Code so angepasst werden, dass er wie Magie aussieht. Lass uns schauen, wie requests_html uns ermöglicht, mit solchen Inhalten zu arbeiten.
Wie bekannt, sind nicht alle Webseiten gleich nützlich. Manche Seiten laden ihren Inhalt sofort, während andere ihn dynamisch mit Hilfe von JavaScript generieren oder aktualisieren. Das macht es für diejenigen, die Daten extrahieren möchten, etwas schwieriger, da der HTML-Code, den du mit Entwicklerwerkzeugen siehst, von dem abweichen kann, was du mit einer Standardanfrage erhältst.
Probleme beim Scrapen von dynamischen Inhalten
Die meisten Web-Bibliotheken, wie z. B. requests, arbeiten nur mit Serverantworten und können kein JavaScript ausführen. Das bedeutet, wenn der Inhalt durch JavaScript geladen oder verändert wird, kannst du ihn mit einer normalen Anfrage möglicherweise nicht sehen.
2. Verwendung der Bibliothek requests_html
Und genau hier kommt requests_html ins Spiel — eine Bibliothek, die die Einfachheit von requests mit der Leistungsfähigkeit eines Browsers zur Ausführung von JavaScript kombiniert. Sie liefert dir eine einfache Rendering-Engine, die es ermöglicht, mit dynamischen Webseiten so zu interagieren, als würdest du einen echten Browser benutzen.
Installation und Einrichtung der Bibliothek
Um loszulegen, installieren wir requests_html. Öffne dein bevorzugtes Terminal und führe den folgenden Befehl aus:
pip install requests-html
Perfekt, die Bibliothek ist installiert! Jetzt können wir loslegen.
Grundlagen der Nutzung von requests_html zur Extraktion von JavaScript-Inhalten
requests_html macht unser Leben einfacher. Lass uns anschauen, wie das in der Praxis funktioniert. Angenommen, wir haben eine Seite, die einige Daten mithilfe von JavaScript generiert.
from requests_html import HTMLSession
# Erstelle eine HTML-Sitzung
session = HTMLSession()
# Anfrage an die Webseite senden
response = session.get('https://example-dynamic-page.com')
# JavaScript rendern
response.html.render()
# Daten extrahieren
data = response.html.find('#dynamic-content', first=True)
print(data.text)
Das ist Magie! Im Gegensatz zu requests bietet uns requests_html die Methode .render(), die es uns erlaubt, die Seite "zum Laufen" zu bringen und JavaScript auszuführen. Sobald die Seite "lebendig" ist, kannst du die benötigten Daten mit bekannten Selektoren extrahieren.
3. Beispiele für die Datenextraktion
Lass uns jetzt tiefer einsteigen und ein paar Beispiele betrachten, um zu sehen, wie requests_html uns in verschiedenen Szenarien hilft.
Praxisszenarien zur Datenextraktion von dynamischen Seiten
Stell dir eine Seite vor, die die neuesten Nachrichten erst nach dem Scrollen lädt. Mit requests_html können wir das Verhalten eines Nutzers simulieren.
url = 'https://example-news-site.com'
# Seite laden
response = session.get(url)
# Rendering mit erhöhtem Timeout durchführen, falls nötig
response.html.render(timeout=20)
# Nachrichten-Elemente finden
news_items = response.html.find('.news-item')
for item in news_items:
print(item.text)
So einfach und mühelos haben wir Zugang zu Inhalten erhalten, die früher schwer zugänglich schienen!
Verarbeitung von geladenem JavaScript-Inhalt mit requests_html
Mit requests_html und den CSS-Selektoren, die wir in den vorherigen Vorlesungen behandelt haben, kannst du mit Inhalten auf Webseiten arbeiten, als würdest du seit Jahren scrapen!
# Wähle das erste Element der Nachrichtenüberschrift aus
headline = response.html.find('.news-headline', first=True)
print(headline.text)
# Extrahiere den Link aus dem Element
link = headline.find('a', first=True).attrs['href']
print(link)
4. Praxis-Tipps und Tricks
Obwohl requests_html ein leistungsstarkes Tool ist, gibt es ein paar Dinge, die du beachten solltest:
- Timeouts und Verzögerungen: Denke daran, Timeout-Einstellungen für kompliziertere Seiten anzupassen. Das hilft, Fehler aufgrund langsamer Ladezeiten zu vermeiden.
- Rendering-Kapazitäten:
requests_htmlkann viele Ressourcen verbrauchen, da es JavaScript rendert. Für große Datenmengen oder komplexe Seiten kann dies den Prozess verlangsamen. - CAPTCHA und Bot-Schutz:
requests_htmlumgeht keinen Bot-Schutz oder CAPTCHA, daher ist es bei komplexeren Fällen besser, Selenium zu verwenden.
GO TO FULL VERSION