Scrapen von statischen und dynamischen Websites mit Python und ProxyScrape API

Leitfäden, Python, Die Unterschiede, May-02-20245 Min. gelesen

In einer Welt, die immer stärker auf Daten angewiesen ist, kann die Fähigkeit, große Mengen an Informationen zu sammeln und zu analysieren, Unternehmen und Fachleuten einen erheblichen Wettbewerbsvorteil verschaffen. Web Scraping, das Extrahieren von Daten aus Websites, ist ein mächtiges Werkzeug im Arsenal von Datenanalysten, Webentwicklern, Digital Marketern und Python-Programmierern. Dieser Leitfaden führt Sie durch grundlegende und fortgeschrittene Web-Scraping-Techniken, hebt Best Practices hervor und stellt die Web Scraping API von ProxyScrape als flexible Lösung für statische und dynamische Websites vor.

Erkennen, ob eine Website statisch oder dynamisch ist

Um festzustellen, ob eine Website statisch oder dynamisch ist:

  • Prüfen Sie den Seitenquelltext: Klicken Sie mit der rechten Maustaste und wählen Sie "Seitenquelle anzeigen". Wenn alle Inhalte sichtbar sind und mit dem übereinstimmen, was auf der Seite angezeigt wird, handelt es sich wahrscheinlich um eine statische Seite.
  • Verwenden Sie die Browser-Entwicklerwerkzeuge: Öffnen Sie die Entwicklertools, indem Sie mit der rechten Maustaste auf die Seite klicken und "Untersuchen" wählen, und sehen Sie sich dann die Registerkarte "Netzwerk" an, während Sie mit der Seite interagieren. Wenn als Reaktion auf Interaktionen neue Netzwerkanfragen gestellt werden, handelt es sich wahrscheinlich um eine dynamische Website.
  • Deaktivieren Sie JavaScript: Versuchen Sie, JavaScript in Ihren Browsereinstellungen zu deaktivieren, und laden Sie die Seite erneut. Wenn die Seite nicht mehr richtig funktioniert oder nur sehr wenig Inhalt anzeigt, ist sie wahrscheinlich auf JavaScript für das Abrufen und Rendern von Daten angewiesen, was auf eine dynamische Natur hinweist.

Diese Methoden stellen nur einige wenige Möglichkeiten dar, um festzustellen, ob eine Website statisch oder dynamisch ist. Es gibt zwar noch weitere Strategien, aber wir haben diese Techniken analysiert und identifiziert, die unserer Meinung nach weit verbreitet und effektiv sind.

Scraping statischer Websites mit Requests und BeautifulSoup

Zum Scrapen statischer Inhalte bietet Python robuste Bibliotheken wie `requests` für HTTP-Anfragen und `BeautifulSoup` zum Parsen von HTML- und XML-Dokumenten. Hier ist ein einfaches Beispiel:

  • Eine Anfrage stellen: Verwenden Sie `requests`, um den HTML-Inhalt der Seite abzurufen.
  • Parsing mit BeautifulSoup: Sobald Sie den Seiteninhalt haben, kann "BeautifulSoup" bestimmte Informationen analysieren und extrahieren.
Anfragen importieren 
von bs4 importieren BeautifulSoup

Antwort = requests.get('http://example.com')

soup = BeautifulSoup(response.text, 'html.parser')

# Extrahieren der gewünschten Daten
data = soup.find_all('p')

Diese Methode ist perfekt für diejenigen, die gerade erst mit dem Web Scraping beginnen. Sie ist effektiv für Websites mit statischem Inhalt und erfordert nur eine minimale Einrichtung.

Scraping Dynamische Websites

Dynamische Websites stellen eine andere Herausforderung dar. Diese Websites laden ihren Inhalt asynchron mit JavaScript, was bedeutet, dass einfaches HTML-Scraping nicht funktioniert, da die Daten nicht beim ersten Laden der Seite vorhanden sind.

Es gibt zwei Möglichkeiten, dynamisches Website-Scraping zu betreiben:

  • Der erste Ansatz ist die Verwendung einer Browser-Automatisierungsbibliothek wie Playwright/Selenium, um den Inhalt zu erhalten und ihn dann mit Beautifulsoup zu parsen.
  • Der zweite Ansatz ist wie ein Detektivspiel mit der Netzwerk-Registerkarte, um den Endpunkt ausfindig zu machen, den die Website zum Abrufen ihrer Daten verwendet. Dann verwenden Sie einfach das Python-Modul "request", um diese Daten selbst abzurufen.

Navigieren auf dynamischen Websites mit Playwright

Zum Scrapen dynamischer Inhalte ahmen Tools wie Playwright die Interaktion eines echten Benutzers mit dem Browser nach und ermöglichen so das Scrapen von Daten, die dynamisch geladen werden. Hier erhalten Sie einen kurzen Einblick in die Verwendung von Playwright mit Python:

  • Installation von Playwright: Installieren Sie das Playwright-Paket und das Befehlszeilenwerkzeug.
    - "pip install playwright"
    - "playwright install"
  • Verwenden Sie Playwright, um Interaktionen zu simulieren: Schreiben Sie ein Skript, das auf der Website navigiert und bei Bedarf mit ihr interagiert, um das Laden dynamischer Inhalte auszulösen.
from playwright.sync_api import sync_playwright


if __name__ == '__main__':

   with sync_playwright() as p:

       browser = p.chromium.launch(headless=True)

      Seite = browser.new_page()

      Seite.goto('https://www.scrapethissite.com/pages/ajax-javascript/')

      # Interaktionen hier simulieren

      page.click('//*[@id="2014"]')

      # Extrahieren Sie den dynamischen Inhalt

       content = page.inner_text('//*[@id="oscars"]/div/div[5]/div/table')

      print(content)

       browser.close()

Analysieren des Netzwerkpanels, um API-Endpunkte zu erhalten:

  • Entwicklertools öffnen
    a. Öffnen Sie die gewünschte Website in Ihrem Browser.
    b. Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle der Seite und wählen Sie Prüfen oder drücken Sie Strg+Umschalt+I (Cmd+Option+I auf Mac), um die Entwicklertools zu öffnen.
  • Überprüfen Sie die Registerkarte Netzwerk
    a. Klicken Sie in den Entwicklertools auf die Registerkarte Netzwerk. Auf dieser Registerkarte sehen Sie jede Netzwerkanfrage der Website.
    b. Aktualisieren Sie die Seite, um den Datenverkehr von Anfang an zu erfassen.
  • Filtern und Identifizieren von AJAX-Anfragen
    a. Sie können die Anfragen nach Typen wie XHR (XMLHttpRequest) filtern, die häufig für AJAX-Anfragen verwendet werden.
    b. Interagieren Sie mit der Seite, z. B. durch Anklicken von Schaltflächen, Ausfüllen von Formularen oder Scrollen, um das dynamische Laden von Inhalten auszulösen.
    c. Beobachten Sie die Netzwerkanfragen, die erscheinen, wenn Sie diese Aktionen durchführen. Suchen Sie nach Anfragen, die Daten abrufen, an denen Sie interessiert sind.
  • Analysieren Sie die Anfrage
    a. Klicken Sie auf der Registerkarte "Netzwerk" auf eine Anfrage, die so aussieht, als würde sie die benötigten Daten abrufen.
    b. Überprüfen Sie den Abschnitt "Header", um die Anfragemethode (GET, POST usw.), die URL und andere Header zu sehen.
  • Replizieren Sie die Anfrage mit Python
    a. Verwenden Sie die Informationen auf der Registerkarte Kopfzeilen, um die Anfrage mit der Python-Anfrage-Bibliothek zu replizieren. Hier ist ein einfaches Beispiel, wie Sie das tun können:
import requests

# URL from the AJAX request
url = 'https://example.com/api/data'

# Any headers you observed that are necessary, like user-agent, authorization tokens, etc.
headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36,gzip(gfe)',
    'Authorization': 'Bearer token_if_needed'
}

# If it's a POST request, you might also need to send data
data = {
    'example_key': 'example_value'
}

# Replace 'get' with 'post' if the request type is POST
response = requests.get(url, headers=headers, data=data if 'post' in locals() else None)

# To view the response
print(response.json()) 

Verwendung einer Web Scraping API für beide Szenarien

Die Beherrschung von Anfragen und Playwright oder einer anderen Http-Client-Bibliothek kann zwar lohnend sein, erfordert aber Zeit und Mühe, um sie korrekt zu bearbeiten. Ein alternativer Ansatz ist die Nutzung einer Web Scraping API, die die Komplexität von Scraping-Aufgaben abstrahiert. Sie übernimmt nicht nur das Senden von HTTP-Anfragen für Sie, sondern bietet auch Unterstützung bei Anti-Ban-Techniken, um zu verhindern, dass Sie von bestimmten Websites blockiert werden.

Einführung in ProxyScrape's Web Scraping API

ProxyScrape bietet eine Web Scraping API, die die Datenextraktion aus statischen und dynamischen Websites vereinfacht.

Die API-Funktionen umfassen:

  • Einfache Integration in dynamische und statische Websites.
  • Umfassende Unterstützung für verschiedene Arten von Web-Scraping-Aktivitäten.
  • Umfangreicher Pool von IP-Adressen
  • Bietet bis zu 100.000 kostenlose Anfragen, so dass die Nutzer das volle Potenzial der API ohne sofortige Investitionen erkunden und nutzen können.
  • Hochentwickelte Anti-Ban-Technologie, die auf Websites zugeschnitten ist, die für ihre Scraping-Probleme bekannt sind.
  • Aktionen ermöglichen eine genaue Kontrolle über den Zeitpunkt des Empfangs von Website-Ausgaben. Dazu gehören das Warten auf eine bestimmte URL-Anfrage, das Vorwegnehmen des Erscheinens eines Elements auf der Website, Post-Scroll-Aktivitäten und vieles mehr. Verwendung von

ProxyScrape Web Scraping API mit einer statischen Website:

Dies ist ein Beispiel dafür, wie Sie unsere Web-Scraping-API in Ihre Python-Skripte für statische Websites oder zum Aufrufen eines API-Endpunkts, den Sie aus dem Inspektionsbereich Ihres Browsers extrahiert haben, einbinden können:

import requests
import base64
import json

data = {
    "url": "https://books.toscrape.com/",
    "httpResponseBody": True
}

headers = {
    'Content-Type': 'application/json',
    'X-Api-Key': 'YOUR_API_KEY'
}

response = requests.post('https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request', headers=headers, json=data)

if response.status_code == 200:
    json_response = response.json()
    if 'browserHtml' in json_response['data']:
        print(json_response['data']['browserHtml'])
    else:
        print(base64.b64decode(json_response['data']['httpResponseBody']).decode())
else:
    print("Error:", response.status_code)

ProxyScrape Web Scraping API mit einer dynamischen Website:

Hier ein Beispiel, bei dem wir darauf warten, dass das Favicon zu laden beginnt. Das ist normalerweise die letzte Anforderung, die auf der von uns verwendeten Test-Website gestartet wird.

import requests
import json

url = 'https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request'

headers = {
    'Content-Type': 'application/json',
    'X-Api-Key': '<your api key>'  # Make sure to replace <your api key> with your actual API key
}

payload = {
    "url": "https://books.toscrape.com/",
    "browserHtml": True,
    "actions": [
        {
            "action": "waitForRequest",
            "urlPattern": "https://books.toscrape.com/static/oscar/favicon.ico",
            "urlMatchingOptions": "exact"
        }
    ]
}

response = requests.post(url, headers=headers, json=payload)

# Print the response from the server
print(response.text)  # Prints the response body as text

Bewährte Praktiken beim Web Scraping

Unabhängig von den von Ihnen gewählten Tools oder APIs sind die Einhaltung der Nutzungsbedingungen von Websites, die Begrenzung der Anfrageraten zur Vermeidung von IP-Sperren und die Verwendung von Proxys für anonymes Scraping wichtige Best Practices. ProxyScrape bietet nicht nur Premium-, private, mobile und dedizierte Proxys für solche Anforderungen, sondern fördert auch ethisches Web Scraping.

Schlussfolgerung

  • Ganz gleich, ob Sie Web-Scraping als Hobby betreiben oder es in Ihr professionelles Toolkit integrieren, es ist wichtig, den Unterschied zwischen statischen und dynamischen Websites zu verstehen und zu wissen, wie man beide effektiv scrapen kann. Durch die Kombination von Python-Bibliotheken wie Requests und Playwright/Selenium mit Beautifulsoup sind Sie für Ihre Web-Scraping-Herausforderungen gerüstet.
  • Wenn Ihre Web-Scraping-Skripte als Bots erkannt und daraufhin blockiert werden oder wenn Sie Ihren Anfrageversandprozess optimieren und vereinfachen möchten, sollten Sie unsere Web Scraping API in Betracht ziehen. Sie wurde entwickelt, um diese Probleme in Ihrem Namen effizient zu lösen.
  • Denken Sie daran, dass die Zukunft des Web-Scraping vielversprechend ist. Wenn Sie sich an bewährte Verfahren halten und modernste Tools nutzen, können Sie eine Welt von Daten erschließen, die nur darauf wartet, entdeckt zu werden.

Sind Sie bereit, Ihr Web Scraping-Abenteuer zu beginnen? Melden Sie sich noch heute bei ProxyScrape an und erkunden Sie die unendlichen Möglichkeiten des Webs mit unseren dedizierten Proxys, Proxys für Privatanwender und unserer umfassenden Web Scraping API.