CodeGym /Kurse /Python SELF DE /Datensammlung mit „Weiter“-Links

Datensammlung mit „Weiter“-Links

Python SELF DE
Level 34 , Lektion 1
Verfügbar

1. Einführung in Pagination

Und wer hat gesagt, dass die Daten, die du brauchst, alle auf einer Seite liegen? Oft musst du sie aus einem Haufen Seiten zusammensuchen oder sie sind über die gesamte Website verteilt. Also, eine der ersten Herausforderungen, die dir begegnet, ist die Aufteilung der Daten auf Seiten (pages). Und der spannende Job, diese einzusammeln, nennt sich Pagination.

Ja, Pagination ist nicht nur der Moment, wenn du darauf wartest, zur nächsten Seite der Google-Ergebnisse zu springen, sondern auch, wenn ein Web-Scraper sich fragt: "Wie kann ich das automatisieren, damit ich das nicht manuell machen muss?"

Pagination ist eine Methode, Daten auf einer Website zu organisieren, um lange Content-Seiten zu vermeiden. Stattdessen teilen Websites die Daten auf Seiten auf und fügen Links wie "Nächste" oder "Weiter" hinzu, um von einer Seite zur anderen zu navigieren. Das ist ein wichtiges Konzept, weil du als Web-Scraper bestimmt nicht deinem Chef sagen willst, dass etwas fehlt, weil es auf der "fünften Seite" versteckt ist.

2. Herausforderungen beim Scrapen von mehreren Seiten

Das erste Problem, dem du begegnen könntest, ist das Fehlen von intuitiven und vorhersagbaren URLs. Manche Websites ändern ihre URLs nicht wesentlich, wenn du zwischen Seiten wechselst, was das Leben für die Automatisierung ziemlich schwer macht. Zum Beispiel statt page=1, page=2 könntest du auf x=abc, x=def stoßen, ohne offensichtliches Muster.

Das zweite Problem ist der Bot-Schutz. Manche Websites verfolgen aktiv die Anzahl von Anfragen von einer IP-Adresse. Wenn sie sehen, dass du zu viele Anfragen machst, könnten sie dich vorübergehend (oder dauerhaft) blockieren.

Aber keine Sorge, wir lernen jetzt, wie wir diese Herausforderungen meistern können wie echte Scraper-Profis.

3. Umgang mit Pagination

Techniken und Strategien

  1. Analyse der URL-Struktur: In der Regel verwenden Seiten einen Parameter in der URL, um die Seitennummer anzugeben, zum Beispiel ?page=2. Wenn du das findest, herzlichen Glückwunsch, du hast einen goldenen Muster für den Umgang mit Pagination gefunden!
  2. Suche nach „Weiter“-Links: Manchmal ist die URL unberechenbar. In solchen Fällen musst du nach Links wie "Weiter" oder "Nächste" auf der Seite suchen und diesen folgen.
  3. Verwendung von AJAX-Anfragen: Manche Seiten laden Daten mit AJAX ohne Seitenneuladen. In diesem Fall musst du diese Anfragen abfangen und reproduzieren.

Lass uns zur Praxis kommen!

Beispielskript für den Umgang mit Pagination und Datensammlung

Schauen wir uns ein Beispielskript an:

Python

import requests
from bs4 import BeautifulSoup

# Funktion, um Daten von einer Seite zu erhalten
def get_data_from_page(url):
    response = requests.get(url)
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        # Hier extrahierst du Daten von soup — Beispiel
        data = soup.find_all('div', class_='data-class')
        for item in data:
            print(item.text)  # Gib die Daten aus oder speichere sie
    else:
        print(f"Seite konnte nicht geladen werden: {url}")

# Hauptlogik für den Umgang mit Pagination
def scrape_all_pages(start_url):
    current_url = start_url
    while current_url:
        get_data_from_page(current_url)
        soup = BeautifulSoup(requests.get(current_url).text, 'html.parser')
        # Versuche "Weiter"-Link zu finden
        next_button = soup.find('a', text='Weiter')
        if next_button:
            current_url = next_button['href']
        else:
            current_url = None

# Starte Scraping von der ersten Seite
start_url = 'http://example.com/page=1'
scrape_all_pages(start_url)

Dies ist ein einfaches Beispiel, das das Prinzip des Umgangs mit Pagination demonstriert. Du musst es an die Struktur der Website anpassen, mit der du arbeitest.

Sitzungsmanagement und Verwendung von User-Agent

Wenn du viele Anfragen an eine Website sendest, ist es nützlich, eine Sitzung zu verwenden und den User-Agent zu ändern, um das Risiko einer Blockierung zu verringern.

Python

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'}

session = requests.Session()
session.headers.update(headers)

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

Diese Konstruktion ermöglicht es, den Browser zuverlässiger zu emulieren, als nur Anfragen mit leeren Headern zu senden.

4. Praktische Umsetzung

Jetzt, da wir die Grundlagen kennen, lass uns die Aufgabe ein bisschen komplizierter machen. Betrachten wir den Fall, bei dem die Links zu den Seiten unberechenbare Parameter enthalten und wir AJAX verwenden müssen, um Daten zu laden.

Umsetzung mit AJAX

Manchmal werden Daten nicht auf der Hauptseite geladen, sondern sie werden über AJAX nachgeladen. Wenn du merkst, dass sich die Website so verhält, benutze die Entwicklerwerkzeuge deines Browsers zur Netzwerk-Analyse, um festzustellen, welche Anfragen im Hintergrund gesendet werden. Reproduziere diese Anfragen dann mit Python.

Python

# Beispiel für eine AJAX-Anfrage
ajax_url = 'http://example.com/ajax_endpoint'

params = {
'some_param': 'value',  # Parameter, falls für die Anfrage erforderlich
'page': 1
}

while True:
response = session.get(ajax_url, params=params)
data = response.json()
if not data['has_more']:
break
# Verarbeitung der Daten
for item in data['items']:
print(item)
params['page'] += 1  # Weiter zur nächsten Seite

Dieser Ansatz hilft, wenn du nach einer detaillierten Analyse der Anfrage und Antwort verstehst, wie Daten im Browser geladen werden.

Die heutige Vorlesung hat uns in die faszinierende und oft anspruchsvolle Welt der Pagination geführt. Diese Fähigkeit ermöglicht es dir, Daten von Websites sicher und effektiv zu sammeln, ohne eine einzige Seite zu verpassen. Schließlich, wie im Leben, sind im Web-Scraping Planmäßigkeit und Ausdauer entscheidend, denn wer weiß, welche versteckten Schätze auf der zwanzigsten Seite liegen!

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION