Web Scraping ist eine der besten Datenerfassungsmethoden, um Daten zu sammeln und darauf benutzerdefinierte Datensätze zu erstellen.

Im Zeitalter der datengesteuerten Entscheidungsfindung sind qualitativ hochwertige Datensätze von entscheidender Bedeutung. Obwohl es zahlreiche öffentlich verfügbare Datensätze gibt, müssen Sie manchmal benutzerdefinierte Datensätze erstellen, die Ihren spezifischen Anforderungen entsprechen. Mit Web Scraping können Sie Daten von Websites extrahieren. Anschließend können Sie diese Daten verwenden, um Ihren benutzerdefinierten Datensatz zu erstellen.

Überblick über Datenerfassungsmethoden

Es gibt verschiedene Methoden zur Datenerhebung. Dazu gehören manuelle Dateneingabe, APIs, öffentliche Datensätze und Web Scraping. Jede Methode hat ihre Vorteile und Grenzen.

Die manuelle Dateneingabe ist zeitaufwändig und anfällig für menschliche Fehler, insbesondere bei der Erfassung umfangreicher Daten. Es ist jedoch hilfreich für die Datenerfassung in kleinem Maßstab und wenn Daten nicht auf andere Weise verfügbar sind.

instagram viewer

APIs ermöglichen Entwicklern den strukturierten Zugriff auf und den Abruf von Daten. Sie liefern oft Echtzeit- oder regelmäßig aktualisierte Informationen. Allerdings kann der API-Zugriff eingeschränkt sein, eine Authentifizierung erfordern oder Nutzungsbeschränkungen unterliegen.

Öffentliche Datensätze decken ein breites Spektrum an Themen und Domänen ab. Sie sind vorab zusammengestellt und liegen oft in einem strukturierten Format vor, sodass sie leicht zugänglich sind. Sie können Zeit und Aufwand sparen, wenn die erforderlichen Daten mit den verfügbaren Datensätzen übereinstimmen. Allerdings decken sie möglicherweise nicht immer Ihre spezifischen Bedürfnisse ab oder sind nicht immer auf dem neuesten Stand.

Web Scraping bietet eine Möglichkeit, Daten von Websites zu sammeln, die keine APIs anbieten oder nur eingeschränkten Zugriff haben. Es ermöglicht Anpassung, Skalierbarkeit und die Möglichkeit, Daten aus mehreren Quellen zu sammeln. Es erfordert jedoch Programmierkenntnisse, Kenntnisse der HTML-Struktur und die Einhaltung rechtlicher und ethischer Richtlinien.

Wählen Sie Web Scraping zur Datenerfassung

Mit Web Scraping können Sie Informationen direkt aus Webseiten extrahieren und so auf eine Vielzahl von Datenquellen zugreifen. Außerdem haben Sie die Kontrolle darüber, welche Daten extrahiert werden sollen und wie diese strukturiert werden sollen. Dies macht es einfach, den Scraping-Prozess an Ihre spezifischen Anforderungen anzupassen und genau die Informationen zu extrahieren, die Sie für Ihr Projekt benötigen.

Identifizieren der Datenquelle

Der erste Schritt beim Web Scraping ist die Identifizierung der Datenquelle. Dies ist die Website, die die Daten enthält, die Sie extrahieren möchten. Stellen Sie bei der Auswahl der Datenquelle sicher, dass Sie sich an die Nutzungsbedingungen der Quelle halten. Dieser Artikel verwendet IMDb (Internet Movie Database) als Datenquelle.

Einrichten Ihrer Umgebung

Richten Sie eine virtuelle Umgebung ein. Führen Sie dann den folgenden Befehl aus, um die erforderlichen Bibliotheken zu installieren.

pip install fordert beautifulsoup4 pandas an

Sie werden die verwenden Anfragen Bibliothek, um HTTP-Anfragen zu stellen. schöne Suppe4 um HTML-Inhalte zu analysieren und Daten aus Webseiten zu extrahieren. Schließlich werden Sie verwenden Pandas Daten zu manipulieren und zu analysieren.

Der vollständige Quellcode ist in a verfügbar GitHub-Repository.

Schreiben des Web Scraping-Skripts

Importieren Sie die installierten Bibliotheken in Ihr Skript, um die von ihnen bereitgestellten Funktionen nutzen zu können.

importieren Anfragen
aus bs4 importieren Schöne Suppe
importieren Zeit
importieren Pandas als pd
importieren Betreff

Der Zeit Und Betreff Module sind Teil der Python-Standardbibliothek. Daher sind keine separaten Installationen erforderlich.

Zeit führt zu Verzögerungen beim Schabevorgang Betreff werde mich damit befassen Reguläre Ausdrücke.

Du wirst Verwenden Sie Beautiful Soup, um die Zielwebsite zu durchsuchen.

Erstellen Sie eine Funktion, die eine HTTP-GET-Anfrage an Ihre Ziel-URL sendet. Anschließend sollte der Inhalt der Antwort abgerufen und eine erstellt werden Schöne Suppe Objekt aus dem HTML-Inhalt.

defget_soup(URL, Parameter=Keine, Header=Keine):
Antwort = request.get (url, params=params, headers=headers)
Suppe = BeautifulSoup (response.content, „html.parser“)
zurückkehren Suppe

Der nächste Schritt besteht darin, Informationen aus dem zu extrahieren Schöne Suppe Objekt.

Um die Informationen zu extrahieren, müssen Sie die Struktur Ihrer Zielwebsite verstehen. Dabei wird der HTML-Code der Website überprüft. Dies wird Ihnen helfen, die Elemente und Attribute zu identifizieren, die die Daten enthalten, die Sie extrahieren möchten. Um Ihre Zielwebsite zu überprüfen, öffnen Sie den Link in einem Webbrowser und navigieren Sie zu der Webseite, die die Daten enthält, die Sie durchsuchen möchten.

Klicken Sie dann mit der rechten Maustaste auf die Webseite und wählen Sie aus Prüfen aus dem Kontextmenü. Dadurch werden die Entwicklertools des Browsers geöffnet.

Suchen Sie im HTML-Code der Webseite nach Elementen, die die Daten enthalten, die Sie durchsuchen möchten. Achten Sie auf die HTML-Tags, Klassen und Attribute, die mit den benötigten Daten verknüpft sind. Sie werden sie verwenden, um Selektoren zum Extrahieren der Daten mit BeautifulSoup zu erstellen. Im Screenshot oben können Sie sehen, dass sich der Titel des Films darin befindet Listener-Element-Header Klasse. Überprüfen Sie jedes Feature, das Sie extrahieren möchten.

Erstellen Sie eine Funktion, die Informationen aus dem extrahiert Schöne Suppe Objekt. In diesem Fall findet die Funktion mithilfe geeigneter HTML-Tags und Klassenattribute Titel, Bewertung, Beschreibung, Genre, Erscheinungsdatum, Regisseure und Stars des Films.

defextrahiere_film_daten(Film):
title = movie.find(„h3“, class_=„lister-item-header“).finden("A").Text
Rating = movie.find(„div“, class_=„Bewertungen-imdb-Bewertung“).strong.text
Beschreibung = movie.find(„div“, class_=„lister-item-content“).finde alle("P")[1].text.strip()
genre_element = movie.find("Spanne", class_="Genre")
genre = genre_element.text.strip() Wenn genre_element andersKeiner
release_date = movie.find("Spanne", class_=„lister-item-year text-muted unbold“).text.strip()
Director_stars = movie.find("P", class_=„Text stummgeschaltet“).finde alle("A")
Directors = [person.text für Person In Director_stars[:-1]]
Sterne = [person.text für Person In Director_stars[-1:]]
movie_data = {
"Titel": Titel,
„Bewertung“: Bewertung,
"Beschreibung": Beschreibung,
"Genre": Genre,
"Veröffentlichungsdatum": Veröffentlichungsdatum,
„Regisseure“: Regisseure,
"Sterne": Sterne
}
zurückkehren movie_data

Erstellen Sie abschließend eine Funktion, die das eigentliche Scraping mithilfe der beiden oben genannten Funktionen durchführt. Es dauert das Jahr und die maximale Anzahl an Filmen, die Sie durchsuchen möchten.

defscrape_imdb_movies(Jahr, Grenze):
base_url = " https://www.imdb.com/search/title"
Header = {„Akzeptiere-Sprache“: „en-US, en; q=0,9"}
Filme = []
Start = 1
während Länge (Filme) < Limit:
Parameter = {
"Veröffentlichungsdatum": Jahr,
"Sortieren": „num_votes, absteigend“,
"Start": Start
}
Soup = get_soup (base_url, params=params, headers=headers)
movie_list = Suppe.find_all(„div“, class_=„lister-item mode-advanced“)
Wenn len (movie_list) == 0:
brechen
für Film In movie_list:
movie_data = extract_movie_data (Film)
movies.append (movie_data)
Wenn Länge (Filme) >= limit:
brechen
Start += 50# IMDb zeigt 50 Filme pro Seite an
time.sleep(1) # Fügen Sie eine Verzögerung hinzu, um eine Überlastung des Servers zu vermeiden
zurückkehren Filme

Dann rufen Sie an def scrape_imdb_movies um das Schaben zu machen.

# Scrape 1000 Filme, die im Jahr 2023 veröffentlicht wurden (oder so viele wie verfügbar)
movies = scrape_imdb_movies(2023, 1000)

Sie haben jetzt Daten gescrapt.

Der nächste Schritt besteht darin, aus diesen Daten einen Datensatz zu erstellen.

Erstellen eines Datensatzes aus den Scraped-Daten

Erstellen Sie einen DataFrame mit Pandas aus den geschabten Daten.

df = pd. DataFrame (Filme)

Führen Sie dann die Datenvorverarbeitung und -bereinigung durch. Entfernen Sie in diesem Fall Zeilen mit fehlenden Werten. Extrahieren Sie dann das Jahr aus dem Veröffentlichungsdatum und wandeln Sie es in eine numerische Zahl um. Entfernen Sie unnötige Spalten. Konvertieren Sie die Bewertung Spalte in numerisch umwandeln. Entfernen Sie abschließend nichtalphabetische Zeichen aus dem Titel Spalte.

df = df.dropna()
df['Erscheinungsjahr'] = df['Veröffentlichungsdatum'].str.extract(r'(\d{4})')
df['Erscheinungsjahr'] = pd.to_numeric (df['Erscheinungsjahr'],
Fehler='zwingen').astype('Int64')
df = df.drop(['Veröffentlichungsdatum'], Achse=1)
df['Bewertung'] = pd.to_numeric (df['Bewertung'], Fehler='zwingen')
df['Titel'] = df['Titel'].anwenden(Lambda x: re.sub(r'\W+', ' ', X))

Speichern Sie die Daten in einer Datei, um sie später in Ihrem Projekt zu verwenden.

df.to_csv(„imdb_movies_dataset.csv“, index=FALSCH)

Drucken Sie abschließend die ersten fünf Zeilen Ihres Datensatzes aus, um zu sehen, wie er aussieht.

df.head()

Die Ausgabe sieht wie im Screenshot unten aus:

Sie verfügen nun über einen durch Web Scraping erhaltenen Datensatz.

Web Scraping mit anderen Python-Bibliotheken

Beautiful Soup ist nicht die einzige Python-Bibliothek, die Sie zum Web-Scraping verwenden können. Es gibt noch andere Bibliotheken. Jedes mit seinen eigenen Vorteilen und Einschränkungen. Recherchieren Sie, um herauszufinden, welches am besten zu Ihrem Anwendungsfall passt.