Web-Scraping mit AutoScraper Tutorial

AutoScraper ist ein anfängerfreundliches Python-Tool, das das Web-Scraping vereinfacht und strukturierte und dynamische Websites mit minimalem Programmieraufwand verarbeitet.
22 min lesen
Web Scraping with AutoScraper

AutoScraper ist eine Python-Bibliothek, die das Web-Scraping vereinfacht, indem sie Daten automatisch identifiziert und aus Websites extrahiert, ohne dass eine manuelle HTML-Überprüfung erforderlich ist. Im Gegensatz zu herkömmlichen Scraping-Tools lernt AutoScraper die Struktur von Datenelementen anhand von Beispielabfragen, was es zu einer hervorragenden Wahl sowohl für Anfänger als auch für erfahrene Entwickler macht. AutoScraper eignet sich ideal für Aufgaben wie das Sammeln von Produktinformationen, das Aggregieren von Inhalten oder die Durchführung von Marktforschung und verarbeitet dynamische Websites effizient und ohne komplexe Einrichtung.

In diesem Artikel erfahren Sie, wie Sie AutoScraper mit Python für das Web-Scraping verwenden können.

Voraussetzungen

Die Einrichtung von AutoScraper ist einfach. Sie müssen natürlich Python 3 oder eine neuere Version lokal installiert haben. Wie bei jedem anderen Python-Web-Scraping-Projekt müssen Sie nur ein paar Befehle ausführen, um ein Projektverzeichnis zu erstellen und darin eine virtuelle Umgebung zu erstellen und zu aktivieren:

# Projektverzeichnis einrichten
mkdir auto-scrape
cd auto-scrape

# Virtuelle Umgebung erstellen
python -m venv env
# Für Mac- und Linux-Benutzer
source env/bin/activate
# Für Windows-Benutzer
venvScriptsactivate

Die Verwendung einer virtuellen Umgebung vereinfacht die Abhängigkeitsverwaltung im Projekt.

Installieren Sie anschließend die Autoscraper -Bibliothek, indem Sie den folgenden Befehl ausführen:

pip install autoscraper

Sie müssen auch pandas installieren, um die Scraping-Ergebnisse am Ende in einer CSV-Datei zu speichern. pandas ist eine Python-Bibliothek, die ein benutzerfreundliches Tool zur Datenanalyse und -bearbeitung bietet. Damit können Sie die Scraping-Ergebnisse einfach in verschiedenen Formaten wie CSV, XLSX und JSON verarbeiten und speichern. Führen Sie den folgenden Befehl aus, um es zu installieren:

pip install pandas

Wählen Sie eine Zielwebsite aus

Wenn Sie öffentliche Websites scrapen, überprüfen Sie unbedingt die Nutzungsbedingungen (ToS) oder die robots.txt-Datei der Website, um sicherzustellen, dass das Scraping auf dieser Website erlaubt ist. So vermeiden Sie rechtliche oder ethische Probleme. Außerdem sollten Sie Websites auswählen, die Daten in einem strukturierten Format wie Tabellen oder Listen bereitstellen, da diese leichter zu extrahieren sind.

Herkömmliche Scraping-Tools erfordern oft die Analyse der HTML-Struktur einer Webseite, um die gewünschten Datenelemente zu finden. Dies kann zeitaufwändig sein und erfordert Vertrautheit mit Tools wie Browser-Entwicklerkonsolen. AutoScraper vereinfacht diesen Schritt jedoch, indem es die Struktur der Daten anhand von Beispieldaten (auch als wanted_list bekannt) automatisch lernt, sodass keine manuelle Überprüfung erforderlich ist.

In diesem Tutorial beginnen Sie mit dem Scraping von Daten aus der Seite „Countries of the World: A Simple Example“ von Scrape This Site, einer anfängerfreundlichen Sandbox zum Testen von Scraping-Tools. Diese Seite hat eine übersichtliche Struktur, die sich ideal für die Veranschaulichung grundlegender Scraping-Techniken eignet. Sobald Sie die Grundstruktur beherrschen, fahren Sie mit der Seite „Hockey Teams: Forms, Searching and Pagination“ fort, die ein komplexeres Layout aufweist.

Einfache Daten mit AutoScraper scrapen

Nachdem Sie nun zwei Seiten identifiziert haben, die Sie scrapen möchten, können Sie mit dem Scraping beginnen!

Da die Seite „Länder der Welt: Ein einfaches Beispiel“ übersichtlich ist, kann das folgende Skript verwendet werden, um eine Liste der Länder zusammen mit ihrer Hauptstadt, Einwohnerzahl und Fläche zu scrapen:

# 1. Abhängigkeiten importieren
from autoscraper import AutoScraper
import pandas as pd

# 2. URL der zu scrapendenden Website definieren
url = "https://www.scrapethissite.com/pages/simple/"

# 3. AutoScraper instanziieren
scraper = AutoScraper()

# 4. Definieren Sie die gewünschte Liste anhand eines Beispiels aus der Webseite.
# Diese Liste sollte einige Texte oder Werte enthalten, die Sie scrapen möchten.
wanted_list = ["Andorra", "Andorra la Vella", "84000", "468.0"]

# 5. Erstellen Sie den Scraper basierend auf der gewünschten Liste und der URL.
scraper.build(url, wanted_list)

# 6. Rufen Sie die Ergebnisse für alle übereinstimmenden Elemente ab.
results = scraper.get_result_similar(url, grouped=True)

# 7. Zeigen Sie die Schlüssel und Beispieldaten an, um die Struktur zu verstehen.
print("Vom Scraper gefundene Schlüssel:", results.keys())

# 8. Weisen Sie Spalten basierend auf den Scraper-Schlüsseln und der erwarteten Reihenfolge der Daten zu.
columns = ["Country Name", "Capital", "Area (sq km)", "Population"]

# 9. Erstellen Sie einen DataFrame mit den extrahierten Daten.
data = {columns[i]: results[list(results.keys())[i]] for i in range(len(columns))}
df = pd.DataFrame(data)

# 10. Speichern Sie den DataFrame in einer CSV-Datei.
csv_filename = 'countries_data.csv'
df.to_csv(csv_filename, index=False)

print(f"Daten wurden erfolgreich in {csv_filename} gespeichert.")

Dieser Code enthält Inline-Kommentare, die erklären, was gerade passiert, aber hier ist eine kurze Zusammenfassung: Das Skript beginnt mit dem Importieren von AutoScraper und pandas. Als Nächstes definieren Sie die URL der Zielwebsite. Dann erstellen Sie eine Instanz des Scrapers.

Jetzt kommt der interessante Teil: Anstatt dem Scraper detaillierte Anweisungen zu geben, wo sich die Zieldaten auf der Website befinden (wie Sie es bei anderen Scrapern tun würden, wahrscheinlich über XPath oder andere Selektoren), geben Sie einfach ein Beispiel für die Daten, die Sie suchen. Unter dem vierten Kommentar werden die Datenpunkte für eines der Länder dem Scraper als Array (auch als wanted_list bekannt) zur Verfügung gestellt.

Sobald die wanted_list fertig ist, erstellen Sie den Scraper unter Verwendung der URL und der wanted_list. Der Scraper lädt die Zielwebsite herunter und generiert Regeln, die er in seiner Stapelliste speichert. Er verwendet diese Regeln, um in Zukunft Daten aus beliebigen Ziel-URLs zu extrahieren.

Im Code unter Kommentar sechs verwenden Sie die Methode get_result_similar des AutoScraper-Modells, um Daten aus der Ziel-URL zu extrahieren, die den Daten in der wanted_list ähneln. Die nächste Zeile ist eine einfache print-Anweisung, um Ihnen die IDs der Regeln anzuzeigen, unter denen Daten auf der Ziel-URL gefunden wurden. Ihre Ausgabe sollte wie folgt aussehen:

Vom Scraper gefundene Schlüssel: dict_keys(['rule_4y6n', 'rule_gghn', 'rule_a6r9', 'rule_os29'])

Der Code unter den Kommentaren acht und neun erstellt das Headerschema für Ihre CSV-Datei und formatiert die extrahierten Daten in einem Pandas-DataFrame. Schließlich speichert der Code unter Kommentar zehn die Daten in der CSV-Datei.

Sobald Sie dieses Skript ausführen (indem Sie das vorherige Skript in einer Datei namens script.py speichern und python script.py in der Befehlszeile ausführen), werden Sie feststellen, dass eine neue Datei namens countries_data.csv im Projektverzeichnis erstellt wurde, deren Inhalt wie folgt aussieht:

Land, Hauptstadt, Fläche (km²), Einwohnerzahl
Andorra, Andorra la Vella, 84000, 468,0
Vereinigte Arabische Emirate, Abu Dhabi, 4975593, 82880,0
...246 zusammengefasste Zeilen
Sambia, Lusaka, 13460305, 752614,0
Simbabwe, Harare, 11651858, 390580,0

Das war’s schon! So einfach ist es, mit AutoScraper einfache Websites zu scrapen.

Verarbeiten und Extrahieren von Daten aus Websites mit komplexem Design

Bei etwas komplexeren Websites, wie beispielsweise der Seite „Hockey Teams: Forms, Searching and Pagination”, die eine Tabelle mit vielen ähnlichen Werten enthält, kann die zuvor gezeigte Technik versagen. Sie können versuchen, den Namen des Teams, das Jahr, die Siege, Niederlagen und andere Felder aus dieser Website mit derselben Methode wie zuvor zu extrahieren, um sich selbst von dem Problem zu überzeugen.

Glücklicherweise ermöglicht AutoScraper ein genaueres Modelltraining, indem es die gesammelten Regeln während des Erstellungsprozesses bereinigt, bevor das Modell zur Extraktion von Daten verwendet wird. Hier ist der Code, der Ihnen dabei hilft:

from autoscraper import AutoScraper
import pandas as pd

# Definieren Sie die URL der zu scrapendenden Website.
url = "https://www.scrapethissite.com/pages/forms/"

def setup_model():

    # Instanziieren Sie den AutoScraper.
    scraper = AutoScraper()

    # Definieren Sie die gewünschte Liste anhand eines Beispiels aus der Webseite.
    # Diese Liste sollte einige Texte oder Werte enthalten, die Sie scrapen möchten.
    wanted_list = ["Boston Bruins", "1990", "44", "24", "0.55", "299", "264", "35"]

    # Erstellen Sie den Scraper basierend auf der gewünschten Liste und der URL.
    scraper.build(url, wanted_list)

    # Rufen Sie die Ergebnisse für alle übereinstimmenden Elemente ab.
    results = scraper.get_result_similar(url, grouped=True)

    # Zeigen Sie die Daten an, um die Struktur zu verstehen.
    print(results)

    # Speichern Sie das Modell.
    scraper.save("teams_model.json")

def prune_rules():
    # Erstellen Sie eine Instanz von Autoscraper.
    scraper = AutoScraper()
    
    # Laden Sie das zuvor gespeicherte Modell.
    scraper.load("teams_model.json")

    # Aktualisieren Sie das Modell, um nur die erforderlichen Regeln beizubehalten.
    scraper.keep_rules(['rule_hjk5', 'rule_9sty', 'rule_2hml', 'rule_3qvv', 'rule_e8x1', 'rule_mhl4', 'rule_h090', 'rule_xg34'])

    # Das aktualisierte Modell erneut speichern.
    scraper.save("teams_model.json")
    
def load_and_run_model():
    # Eine Instanz von Scraper erstellen.
    scraper = Scraper()
    
    # Das zuvor gespeicherte Modell laden.
    scraper.load("teams_model.json")

    # Ergebnisse für alle übereinstimmenden Elemente abrufen
    results = scraper.get_result_similar(url, grouped=True)

    # Zuweisen von Spalten basierend auf Scraper-Schlüsseln und der erwarteten Reihenfolge der Daten
    columns = ["Team Name", "Year", "Wins", "Losses", "Win %", "Goals For (GF)", "Goals Against (GA)", "+/-"]

    # Erstellen Sie einen DataFrame mit den extrahierten Daten.
    data = {columns[i]: results[list(results.keys())[i]] for i in range(len(columns))}
    df = pd.DataFrame(data)

    # Speichern des DataFrame in einer CSV-Datei
    csv_filename = 'teams_data.csv'
    df.to_csv(csv_filename, index=False)

    print(f"Daten wurden erfolgreich in {csv_filename} gespeichert")

# setup_model()
# prune_rules()
# load_and_run_model()

Dieses Skript enthält drei definierte Methoden: setup_model, prune_rules und load_and_run_model. Die Methode setup_model ähnelt der zuvor gezeigten. Sie erstellt eine Instanz eines Scrapers, erstellt eine wanted_list, baut den Scraper anhand der wanted_list, scrapt die Daten von der Ziel-URL mit diesem Scraper, gibt die Schlüssel (d. h. die während dieser Extraktion gesammelten Regel-IDs) aus und speichert das Modell unverändert in einer Datei namens teams_model.json im Projektverzeichnis.

Um dies auszuführen, entfernen Sie die Auskommentierung der Zeile # setup_model() im vorherigen Skript, speichern Sie das vollständige Skript in einer Datei (z. B. script.py) und führen Sie pythonscript.py` aus.Ihre Ausgabe sollte wie folgt aussehen:

{'rule_hjk5': ['Boston Bruins', 'Buffalo Sabres', 'Calgary Flames', 'Chicago Blackhawks', 'Detroit Red Wings', 'Edmonton Oilers', 'Hartford Whalers', 'Los Angeles Kings', 'Minnesota North Stars', 'Montreal Canadiens', 'New Jersey Devils', 'New York Islanders', 'New York Rangers', 'Philadelphia Flyers', 'Pittsburgh Penguins', 'Quebec Nordiques', 'St. Louis Blues', 'Toronto Maple Leafs', 'Vancouver Canucks', „Washington Capitals”, „Winnipeg Jets”, „Boston Bruins”, „Buffalo Sabres”, „Calgary Flames”, „Chicago Blackhawks”], „rule_uuj6”: [„Boston Bruins”, „Buffalo Sabres”, „Calgary Flames”, „Chicago Blackhawks”, „Detroit Red Wings”, „Edmonton Oilers”, „Hartford Whalers”, „Los Angeles Kings“, „Minnesota North Stars“, „Montreal Canadiens“, „New Jersey Devils“, „New York Islanders“, „New York Rangers“, „Philadelphia Flyers“, „Pittsburgh Penguins“, „Quebec Nordiques“, „St. Louis Blues“, „Toronto Maple Leafs“, „Vancouver Canucks“, „Washington Capitals“, „Winnipeg Jets“, „Boston Bruins“, „Buffalo Sabres“, „Calgary Flames”, „Chicago Blackhawks”], „rule_9sty”: [„1990”, „1990”, „1990”, „1990”, „1990”, „1990”, „1990”, „1990”, „1990”, „1990”, '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_9nie': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_41rr': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_ufil': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_ere2': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_w0vo': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_rba5': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_rmae': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_ccvi': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_3c34': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_4j80': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_oc36': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_93k1': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_d31n': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_ghh5': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_5rne': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_4p78': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_qr7s': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_60nk': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_wcj7': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_0x7y': ['1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991'], 'rule_2hml': ['44', '31', '46', '49', '34', '37', '31', '46', '27', '39', '32', '25', '36', '33', '41', '16', '47', '23', '28', '37', '26', '36', '31', '31', '36'], 'rule_swtb': ['24'], 'rule_e8x1': ['0.55', '14', '0,575', '0,613', '-25', '0', '-38', '0,575', '-10', '24', '8', '-67', '32', '-15', '0,512', '-118', '0,588', '-77', '-72', '0', '-28', '-5', '-10', '-9', '21'], 'rule_3qvv': ['24', '30', '26', '23', '38', '37', '38', '24', '39', '30', '33', '45', '31', '37', '33', '50', '22', '46', '43', '36', '43', '32', '37', '37', '29'], 'rule_n07w': ['24', '30', '26', '23', '38', '37', '38', '24', '39', '30', '33', '45', '31', '37', '33', '50', '22', '46', '43', '36', '43', '32', '37', '37', '29'], 'rule_qmem': ['0,55', '0,388', '0,575', '0,613', '0,425', '0,463', '0,388', '0,575', '0,338', '0,487', '0,4', '0,312', '0,45', '0,412', '0,512', '0,2', '0,588', '0,287', '0,35', '0,463', '0,325', '0,45', '0,388', '0,388', '0,45'], 'rule_b9gx': ['264', '278', '263', '211', '298', '272', '276', '254', '266', '249', '264', '290', '265', '267', '305', '354', '250', '318', '315', '258', '288', '275', '299', '305', '236'], 'rule_mhl4': ['299', '292', '344', '284', '273', '272', '238', '340', '256', '273', '272', '223', '297', '252', '342', '236', '310', '241', '243', '258', '260', '270', '289', '296', '257'], 'rule_24nt': ['264', '278', '263', '211', '298', '272', '276', '254', '266', '249', '264', '290', '265', '267', '305', '354', '250', '318', '315', '258', '288', '275', '299', '305', '236'], 'rule_h090': ['264', '278', '263', '211', '298', '272', '276', '254', '266', '249', '264', '290', '265', '267', '305', '354', '250', '318', '315', '258', '288', '275', '299', '305', '236'], 'rule_xg34': ['35', '14', '81', '73', '-25', '0', '-38', '86', '-10', '24', '8', '-67', '32', '-15', '37', '-118', '60', '-77', '-72', '0', '-28', '-5', '-10', '-9', '21']}

Dies zeigt die vollständigen Daten, die AutoScraper in seinem Aufruf „get_result_similar” von der Zielwebsite gesammelt hat. Sie werden feststellen, dass diese Daten viele Duplikate enthalten. Das liegt daran, dass AutoScraper nicht nur die Daten von der Zielwebsite sammelt, sondern auch versucht, sie zu interpretieren, indem es Beziehungen zwischen ihnen errät und Gruppen von Datenpunkten erstellt, die als Regeln bezeichnet werden und seiner Meinung nach miteinander in Zusammenhang stehen. Wenn es die Daten korrekt gruppieren kann, können Sie wie im vorherigen Beispiel sehr einfach Daten aus ähnlichen Websites extrahieren.

Allerdings scheint AutoScraper mit dieser Website Probleme zu haben. Da sie viele Zahlen enthält, geht AutoScraper von einer großen Anzahl von Korrelationen zwischen verschiedenen Zahlen aus, sodass Sie am Ende einen großen Datensatz mit Regeln und doppelten Datenpunkten erhalten.

Nun müssen Sie diesen Datensatz sorgfältig analysieren und die Regeln herausfiltern, die die richtigen Daten (d. h. nur die richtigen Daten aus einer Spalte in der richtigen Reihenfolge) für Ihren Scraping-Auftrag enthalten.

Für diese Ausgabe enthielten die folgenden Regeln zufällig die richtigen Daten (gefunden, indem einige Datenpunkte manuell überprüft und sichergestellt wurde, dass jede der ausgewählten Regeln fünfundzwanzig Datenelemente enthielt, was der Anzahl der Zeilen in der Tabelle auf der Zielseite entspricht):

['rule_hjk5', 'rule_9sty', 'rule_2hml', 'rule_3qvv', 'rule_e8x1', 'rule_mhl4', 'rule_h090', 'rule_xg34']

Sie müssen dies in der Methode prune_rules aktualisieren. Anschließend müssen Sie die Zeile setup_model() auskommentieren und die Zeile prune_rules() im Skript auskommentieren und ausführen. Dieses Mal lädt es das zuvor erstellte Modell aus der Datei teams_model.json, entfernt alles außer den aufgeführten Regeln und speichert es dann wieder in derselben Datei. Sie können sogar den Inhalt der Datei teams_model.json überprüfen, um zu sehen, welche Regeln derzeit darin gespeichert sind. Sobald Sie dies abgeschlossen haben, ist Ihr Modell fertig.

Jetzt können Sie die Methode load_and_run_model ausführen, indem Sie die Zeilen prune_rules und prune_rules auskommentieren, die Zeile load_and_run_model im selben Skript einkommentieren und es erneut ausführen. Es extrahiert die richtigen Daten für Sie und speichert sie in einer Datei namens teams_data.csv im Projektverzeichnis, zusammen mit der folgenden Ausgabe:

Die Daten wurden erfolgreich in teams_data.csv gespeichert.

So sieht die Datei teams_data.csv nach einem erfolgreichen Lauf aus:

Team Name,Jahr,Siege,Niederlagen,Siegquote,Erzielte Tore (GF),Gegentore (GA),+/-
Boston Bruins,1990,44,0,55,24,299,264,35
Buffalo Sabres, 1990, 31, 14, 30, 292, 278, 14...
 21 weitere Zeilen
Calgary Flames, 1991, 31, -9, 37, 296, 305, -9
Chicago Blackhawks, 1991, 36, 21, 29, 257, 236, 21

Den in diesem Artikel entwickelten Code finden Sie in diesem GitHub-Repo.

Häufige Herausforderungen mit AutoScraper

Während AutoScraper sich für einfache Anwendungsfälle eignet, bei denen Ihre Zielwebsite einen relativ kleinen Datensatz mit eindeutigen Datenpunkten enthält, kann die Einrichtung für komplexe Anwendungsfälle, wie beispielsweise eine Website mit einer Tabelle, wie Sie sie zuvor gesehen haben, mühsam sein. Darüber hinaus unterstützt AutoScraper kein JavaScript-Rendering, sodass Sie es mit einem Modul wie Splash oder einer vollwertigen Bibliothek wie Selenium oder Puppeteer integrieren müssen.

Wenn Sie beim Scraping auf Probleme wie IP-Blocks stoßen oder Header anpassen müssen, unterstützt AutoScraper die Angabe einer Reihe zusätzlicher Anfrageparameter, die von seinem Anfragemodul wie folgt verwendet werden:

# Erstellen Sie den Scraper auf einer Anfangs-URL.
scraper.build(
    url,
    wanted_list=wanted_list,
    request_args=dict(proxies=proxies) # Hier können Sie eine Liste von Proxys oder Kunden-Headern übergeben.
)

So können Sie beispielsweise einen benutzerdefinierten User-Agent und einen Proxy für das Scraping mit AutoScraper festlegen:

request_args = { 
  "headers: {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 
            (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"  # Sie können diesen Wert mit Ihrem gewünschten User-Agent anpassen. Dieser Wert ist der von Autoscraper verwendete Standardwert.
  },
  "proxies": {
    "http": "http://user:[email protected]:3128/" # Beispiel-Proxy, um Ihnen zu zeigen, wie Sie die Werte für Proxy-Port, Host, Benutzername und Passwort verwenden
  }
}
# Erstellen Sie den Scraper auf einer Anfangs-URL.
scraper.build(
    url,
    wanted_list=wanted_list,
    request_args=request_args
)

Wenn Sie jedoch vermeiden möchten, immer wieder blockiert zu werden, benötigen Sie einen guten Proxy, der für das Web-Scraping optimiert ist. Hierfür sollten Sie dieResidential-Proxys von Bright Data in Betracht ziehen, die über 150 Millionen Residential-IPs in 195 Ländern verteilt sind.

Die AutoScraper-Bibliothek verwendet intern die Python-Request-Bibliothek, um Anfragen an die Zielwebsite zu senden, und unterstützt von Haus aus keine Ratenbegrenzung. Um Ratenbegrenzungsbeschränkungen von Websites zu umgehen, müssen Sie manuell eine Drosselungsfunktion einrichten oder eine vorgefertigte Lösung wie die Ratelimit-Bibliothek verwenden.

Da AutoScraper nur mit nicht-dynamischen Websites funktioniert, kann es CAPTCHA-geschützte Websites überhaupt nicht verarbeiten. In solchen Fällen ist es sinnvoll, eine detailliertere Lösung wie die Bright Data Web-Scraping-API zu verwenden, die Ihnen strukturierte Daten von Websites wie LinkedIn, Amazon und Zillow liefert.

Fazit

In diesem Artikel haben Sie erfahren, was AutoScraper ist und wie Sie damit Daten aus einfachen und komplexen Websites extrahieren können. Wie Sie gesehen haben, greift AutoScraper auf einfache Requests zurück, um auf Zielwebsites zuzugreifen, was bedeutet, dass es oft Probleme mit dynamischen Websites und solchen hat, die durch Herausforderungen wie CAPTCHA geschützt sind. Darüber hinaus müssen Sie beim Web-Scraping Proxys verwenden, da die meisten Websites Clients mit ungewöhnlich hohem Traffic identifizieren können. In solchen Fällen kann Bright Data helfen.

Bright Data ist ein führender Anbieter von Proxy-Netzwerken, KI-gestützten Web-Scrapern und geschäftsfähigen Datensätzen. Melden Sie sich jetzt an und entdecken Sie die Produkte von Bright Data, einschließlich einer kostenlosen Testversion!