CodeGym /Kurse /Python SELF DE /Laden von dynamischem Inhalt mit requests_html

Laden von dynamischem Inhalt mit requests_html

Python SELF DE
Level 33 , Lektion 4
Verfügbar

1. Dynamischer Inhalt und JavaScript

Wenn du bereits die Grundlagen des Web-Scrapings mithilfe von Bibliotheken wie BeautifulSoup und requests beherrschst, ist es an der Zeit, tiefer in die spannenderen Aspekte dieses Themas einzutauchen. Heute sprechen wir darüber, wie du mit Inhalten arbeiten kannst, die dynamisch erst beim Scrollen der Seite geladen werden. Dein Browser ist vielleicht nicht der einzige Fan von endlosen Feeds, nun kannst du auch deine Skripte darauf trainieren! 🤖

Das Internet ist voller dynamisch geladener Seiten, bei denen der Inhalt erst nach Interaktionen mit JavaScript erscheint. JavaScript „macht die Magie“ auf der Clientseite. Das kann sowohl ein Segen als auch ein Fluch für Web-Scraper sein. Einerseits werden solche Seiten interaktiver und benutzerfreundlicher, andererseits wird das Scraping solcher Seiten schwieriger, da die Bibliothek requests kein JavaScript versteht.

2. Die Bibliothek requests_html

Glücklicherweise gibt es requests_html — eine Bibliothek, die die Stärke von requests und die Browser-Rendering-Möglichkeiten von Pyppeteer vereint. Diese Bibliothek ermöglicht es dir, Seiten mit dynamischem Inhalt zu laden und zu rendern, JavaScript auszuführen und sogar Seiten zu scrollen.

Installation von requests_html

Um loszulegen, musst du die Bibliothek installieren. Wenn du das noch nicht getan hast, führe folgenden Befehl aus:

Bash
pip install requests-html

Arbeiten mit requests_html

Nach der Installation schauen wir uns an, wie man requests_html verwenden kann, um dynamischen Inhalt zu laden und zu bearbeiten.

Beispiel: Laden und Rendern einer Seite

Fangen wir mit einem einfachen Fall an: Laden einer Seite, Ausführen von JavaScript und Extrahieren von Daten. Schauen wir uns ein Beispiel an, bei dem wir eine Seite laden und den Text eines Elements erhalten, das erst nach der JavaScript-Ausführung erscheint.

Python

from requests_html import HTMLSession

# Erstellen der Session
session = HTMLSession()

# Seite laden
response = session.get('https://example.com/dynamic-page')

# JavaScript ausführen, um die Seite zu rendern
response.html.render()

# Text eines Elements extrahieren, das nach dem Rendern erscheint
content = response.html.find('#dynamic-content', first=True)
print(content.text)

In diesem Beispiel verwenden wir die Methode render(), um requests_html zu ermöglichen, JavaScript auf der Seite auszuführen und Inhalte zu rendern, die bei Standard-Ladevorgängen verborgen bleiben könnten.

3. Automatisches Scrollen von Seiten

Manchmal wird der dynamische Inhalt nicht sofort geladen, sondern erscheint erst beim Scrollen der Seite. requests_html kann hier helfen, indem es dir ermöglicht, das Scrollen der Seite zu simulieren und noch mehr Daten zu laden.

Beispiel für automatisches Scrollen

Angenommen, du hast eine Seite mit einem endlosen Newsfeed, und du möchtest so viele Elemente wie möglich extrahieren. So könnte das aussehen:

Python

from requests_html import HTMLSession

session = HTMLSession()
response = session.get('https://example.com/infinite-scroll')

# Seite rendern und scrollen
response.html.render(scrolldown=5, sleep=1)

# Alle News-Elemente extrahieren
news_items = response.html.find('.news-item')

for news_item in news_items:
    print(news_item.text)

Hier wird die Methode render() mit den Parametern scrolldown und sleep ergänzt, die angeben, wie oft die Seite nach unten gescrollt wird und wie lange zwischen den Scrolls gewartet wird.

4. Praktische Anwendung

Warum sollte man sich überhaupt mit solch einem Aufwand wie automatischem Scrollen beschäftigen? 🤔

  • Marktforschung: Viele Unternehmen nutzen solche Seiten, um kontinuierlich Daten anzuzeigen, die für die Analyse von Trends und Verbraucherverhalten nützlich sein können.
  • Soziale Netzwerke überwachen: Viele Social-Media-Plattformen nutzen endlose Feeds, was requests_html zu einem nützlichen Werkzeug für die Überwachung und Sammlung von Daten aus solchen Quellen macht.
  • Nachrichten und Updates: Das Extrahieren von Schlagzeilen und Artikeln von News-Websites mit endlosen Feeds ermöglicht den Erhalt aktueller Informationen zur Analyse.

5. Typische Fehler und deren Lösungen

Beim Arbeiten mit dynamischen Seiten und requests_html können oft Fehler auftreten. Schauen wir uns einige häufige an:

Rendering-Probleme

Manchmal kann die Methode render() nicht erfolgreich abgeschlossen werden, insbesondere wenn die Seite zu groß oder zu komplex ist. In solchen Fällen hilft es, die Renderzeit mit dem Parameter timeout zu erhöhen, oder die Anzahl der Scrolls zu verringern.

Python
response.html.render(timeout=30)

Störende JavaScript-Ausführung

Es kann Situationen geben, in denen JavaScript auf der Seite das Skript blockiert oder Probleme verursacht. Du kannst versuchen, den Parameter wait zu verwenden, um auf das Erscheinen der benötigten Elemente zu warten.

Python
response.html.render(wait=2)

Bildschirmauflösung und Gerätetyp

Einige Seiten können Inhalte abhängig von der Bildschirmauflösung oder dem Gerätetyp bereitstellen. Prüfe, mit welchem User-Agent die Anfrage gestellt und der Inhalt gerendert wird.

Python

response.session.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/58.0.3029.110 Safari/537.3'

6. Weitere Lektüre

requests_html ist ein mächtiges Werkzeug, aber um es vollständig zu nutzen und typische Fehler zu vermeiden, lies die offizielle Dokumentation. Sie hilft dir dabei, besser zu verstehen, wie du Scrolls steuern und komplexe Seiten erfolgreich rendern kannst.

An diesem Punkt bist du mit allem ausgestattet, was du brauchst, um keine Angst mehr vor dynamischem Inhalt und endlosen Feeds zu haben. Sei vorsichtig und denke daran: dein Skript sollte ein weißer Hacker sein, der Menschen hilft, ihre Aufgaben zu automatisieren – und kein Bösewicht! 😇

1
Опрос
Dynamische Inhalte lesen,  33 уровень,  4 лекция
недоступен
Dynamische Inhalte lesen
Dynamische Inhalte lesen
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION