Eine Anleitung für Anfänger zum Erlernen von Web Scraping und Datenvisualisierung mit Python

Leitfäden, Python, Scraping, Dez-00-20215 Min. gelesen

Wie können Sie schnell und effizient aussagekräftige Informationen aus Websites abrufen? Das manuelle Extrahieren von Daten ist sehr zeitaufwändig. Sie können Web-Scraping verwenden, eine automatisierte Methode, um nicht-tabellarische oder schlecht strukturierte Daten von Websites zu erfassen. Später können Sie diese Daten in ein strukturiertes und brauchbares Format konvertieren, z. B. in eine Tabellenkalkulation

Inhaltsübersicht

Wie können Sie schnell und effizient aussagekräftige Informationen aus Websites abrufen? Das manuelle Extrahieren von Daten ist sehr zeitaufwändig. Sie können Web-Scraping verwenden, eine automatisierte Methode, um nicht-tabellarische oder schlecht strukturierte Daten von Websites zu erfassen. Später können Sie diese Daten in ein strukturiertes und brauchbares Format konvertieren, z. B. in eine Tabellenkalkulation oder eine .csv-Datei.

Mit Web Scraping können Sie Daten archivieren und Datenänderungen online verfolgen. Unternehmen nutzen es für verschiedene Zwecke. Online-Shops zum Beispiel nutzen es, um die Preise ihrer Konkurrenten und öffentlich zugängliche Seiten zu scrapen. Anschließend nutzen sie diese Informationen zur Anpassung ihrer Preise. Eine weitere gängige Praxis des Web Scraping ist das Contact Scraping, bei dem die Unternehmen persönliche Daten wie Telefonnummern oder E-Mail-Adressen für Marketingzwecke sammeln. 

Warum wird Web Scraping verwendet?

Warum muss jemand große Mengen von Informationen aus Websites extrahieren? Um dies zu verstehen, schauen Sie sich die folgenden Anwendungen von Web Scraping an.

  • Forschung und Entwicklung - Sie können große Datensätze (Temperatur, allgemeine Informationen usw.) von Websites sammeln und analysieren, um Umfragen für Forschung und Entwicklung durchzuführen.
  • Preisvergleich - Unternehmen und Dienste wie ParseHub nutzen Web Scraping, um Daten von Online-Shopping-Websites zu sammeln und die Preise von Produkten zu vergleichen.
  • Stellenanzeigen - Sie können Web Scraping verwenden, um Details zu offenen Stellen und Vorstellungsgesprächen von verschiedenen Websites zu sammeln und sie an einem Ort aufzulisten. 
  • Social Media Scraping - Sie können Web Scraping nutzen, um Daten von Social-Media-Websites wie Instagram und Twitter zu sammeln und herauszufinden, was gerade angesagt ist.
  • Sammeln von E-Mail-Adressen - Viele Unternehmen nutzen E-Mails als Medium für das Marketing. Sie verwenden Web Scraping, um E-Mail-IDs zu sammeln und dann E-Mails in Massen zu versenden.

Web Scraping mit Python

Sie können Daten von Websites abrufen, indem Sie die folgenden Schritte ausführen.

  • Holen Sie sich die URL, die Sie scrapen möchten
  • Überprüfen Sie die Seite
  • Finden Sie die Daten, die Sie extrahieren müssen
  • Schreiben Sie den Code
  • Den Code ausführen und die Daten extrahieren
  • Speichern Sie die Daten in dem gewünschten Format

Die Bibliotheken, die wir für Web Scraping in Python verwenden können, sind:

Pandas - Pandas wird zur Manipulation und Analyse von Daten verwendet. Sie können diese Bibliothek verwenden, um die Daten zu extrahieren und im gewünschten Format zu speichern.

Beautiful Soup - Es ist ein Python-Paket zum Parsen von HTML- und XML-Dokumenten. Es erstellt Parse-Bäume, die bei der einfachen Extraktion von Daten aus Websites hilfreich sind.

Requests - Es handelt sich um eine einfache HTTP-Bibliothek.

Wir werden diese Website nutzen, um die Zahl der COVID-Fälle zu ermitteln. Anschließend werden wir die Daten analysieren und einige Visualisierungen erstellen.

Bibliotheken importieren

Sie können Requests und BeautifulSoup in Python für Web Scraping importieren, wie unten gezeigt.

Anfragen importieren 
von bs4 importieren BeautifulSoup

URL für das Scraping von Daten

Geben Sie die URL der Website an, von der Sie die Daten abrufen möchten. Sie müssen die Methode requests.get() verwenden, um eine GET-Anfrage an die angegebene URL zu senden. Außerdem müssen Sie einen BeautifulSoup-Konstruktor erstellen, der die beiden String-Argumente entgegennimmt, wie im folgenden Code gezeigt.

url = 'https://www.worldometers.info/coronavirus/countries-where-coronavirus-has-spread/'
page = requests.get(url) 
soup = BeautifulSoup(page.text, 'html.parser') 
  
data = []

Jedes Element kratzen

Mit der Methode soup.find_all() können Sie jedes Element in der Tabelle der URL'sURL's abrufen. Sie gibt ein Objekt zurück, das einen indexbasierten Zugriff auf die gefundenen Vorkommen bietet und mit einer for- oder while-Schleife ausgegeben werden kann.

data_iterator = iter(soup.find_all('td'))

Verwendung einer Schleife

Sie können eine while True-Schleife verwenden, die so lange wiederholt wird, bis Daten im Iterator vorhanden sind.

while True: 
   try: 
        country = next(data_iterator).text 
        bestätigt = next(daten_iterator).text 
        Todesfälle = next(daten_iterator).text 
        Kontinent = next(daten_iterator).text

Bei den Spalten "Bestätigungen" und "Todesfälle" müssen Sie die Kommas entfernen und in int umwandeln. 

data.append(( 
            Land, 
            (bestätigt.replace(', ', '')), 
            (Todesfälle.replace(',', '')), 
            Kontinent
        )) 
    
    außer StopIteration: 
       break

Wenn die Anzahl der Elemente, die noch zu durchlaufen sind, Null ist, wird der Fehler StopIteration ausgelöst.

Erstellen eines Pandas Dataframe

Sie können die Daten von der Website extrahieren, nachdem Sie den obigen Code ausgeführt haben. Sie müssen einen Pandas-Datenrahmen erstellen, um die Daten weiter zu analysieren. Im folgenden Code haben wir die Daten nach der Anzahl der bestätigten COVID-Fälle sortiert.

Importieren Sie die Pandas-Bibliothek, um einen Datenrahmen zu erstellen.

data.sort(key = lambda Zeile: Zeile[1], reverse = True)
import pandas as pd
df = pd.DataFrame(data,columns=['country','Number of cases','Deaths','Continent'],dtype=float)
df.head()
df['Anzahl der Fälle'] = [x.replace(',', '') for x in df['Anzahl der Fälle']]
df['Anzahl der Fälle'] = pd.to_numeric(df['Anzahl der Fälle'])
df

Sie erhalten die folgende Ausgabe:

Um Informationen über Dataframe zu erhalten, verwenden Sie df.info().

df.info()

Spalte "Todesrate" erstellen

Wir erstellen eine neue Spalte mit dem Namen Death_rate (Todesrate), wie unten dargestellt.

dff = df.sort_values(by ='Anzahl der Fälle',ascending = False)
dff['Todesrate'] = (dff['Todesfälle']/dff['Anzahl der Fälle'])*100
dff.head()

Die Ausgabe ist wie folgt.

Web Scraping mit Proxys

Ein Proxy-Server ermöglicht es Ihnen, eine eindeutige IP-Adresse für den Zugriff auf die Informationen zu verwenden, die Sie auslesen möchten. Auf diese Weise kann die Website Ihre tatsächliche IP-Adresse nicht sehen, und Sie können die Daten anonym auslesen. Die Verwendung von Proxys für Web-Scraping ist aus folgenden Gründen notwendig.

  • Mit einem Pool von Proxys können Sie mehrere gleichzeitige Anfragen an einen Webserver senden, ohne gesperrt zu werden.
  • Mit Hilfe von Proxys können Sie Anfragen von einem bestimmten Standort, Gerät, ISP oder Mobilfunknetz aus stellen. Sie können auch Inhalte crawlen, die für ein bestimmtes Gebiet oder Gerät angezeigt werden.
  • Einige Websites haben IP-Sperren, die Sie mit Hilfe von Proxys umgehen können. 

Arten von Proxys für Web Scraping

Sie können die folgenden zwei Proxys verwenden, um Daten von Websites abzurufen.

  • Rechenzentrums-Proxys - Rechenzentrums-IP-Adressen sind die IP-Adressen der Server. Die Server befinden sich in Datenzentren. Das Hauptziel der Rechenzentrums-Proxys besteht darin, Ihre Adresse vor den Websites zu verbergen, die Sie durchsuchen. Diese Proxys werden hauptsächlich zum Scrapen von Geschäftsdaten verwendet.
  • Proxys für Wohngebiete - IP-Adressen für Wohngebiete sind teurer als IP-Adressen für Rechenzentren und schwer zu bekommen. Mit diesen Proxys können Sie einen bestimmten Ort, z. B. eine Stadt, ein Land usw., auswählen und als echter Nutzer in diesem geografischen Gebiet im Internet surfen.

Datenvisualisierung mit Python

Sie wissen, dass Datenvisualisierung die grafische Darstellung von Daten oder Informationen ist. Sie können visuelle Werkzeuge wie Diagramme, Karten und Grafiken verwenden, um die dargestellten Daten zu verstehen. Sehen wir uns an, wie wir die extrahierten Daten von dieser Website mit Datenvisualisierungstools visualisieren können.

Bibliotheken importieren

Sie müssen die folgenden Bibliotheken importieren, um die Daten wie unten gezeigt zu visualisieren.

import seaborn as sns
import matplotlib.pyplot as plt
from pylab import rcParams

Plotten eines Paarkurses

Sie können ein Paardiagramm erstellen, um paarweise Beziehungen in einem Datensatz darzustellen. Mit dem unten stehenden Code können Sie dies leicht implementieren und Trends in den Daten für die weitere Analyse erkennen.

rcParams['figure.figsize'] = 15, 10
from matplotlib.pyplot import figure
figure(num=None, figsize=(20, 6), dpi=80, facecolor='w', edgecolor='k')
sns.pairplot(dff,hue='Kontinent')

Sie erhalten dann die folgende Ausgabe.

Erstellen eines Balkendiagramms

Sie können ein Balkendiagramm erstellen, das kategoriale Daten als rechteckige Balken darstellt und die Werte der verschiedenen Kategorien in den Daten vergleicht. 

sns.barplot(x = 'Land',y = 'Anzahl der Fälle',data = dff.head(10))

Die Ausgabe ist wie folgt.

Erstellen eines Streudiagramms

Anhand eines Streudiagramms können Sie die Beziehung zwischen numerischen Werten verstehen. Es verwendet Punkte, um die Beziehung zwischen Variablen darzustellen. 

sns.scatterplot(x = "Anzahl der Fälle", y = "Todesfälle",hue = "Kontinent",data = dff)

Die Ausgabe ist wie folgt.

Gruppieren und Sortieren der Daten

Im folgenden Code gruppieren wir die Daten nach Kontinent und sortieren sie nach der Anzahl der COVID-Fälle.

dfg = dff.groupby(by = 'Continent',as_index = False).agg({'Number of cases':sum,'Deaths':sum})
dfgg = dfg[1:]
df1 = dfgg.sort_values(by = 'Number of cases',ascending = False)
df1['Death_rate'] = (df1['Deaths']/df1['Number of cases'])*100
df1.sort_values(by = 'Death_rate',ascending = False)

Die Ausgabe ist wie folgt.

Nun werden wir ein Balkendiagramm zwischen "Kontinent" und "Todesrate" erstellen, wie unten gezeigt.

sns.barplot(x = 'Kontinent',y = 'Todesrate',data = df1.sort_values(by = 'Todesrate',ascending = False))

Die Ausgabe ist wie folgt.

Dieses Balkendiagramm zeigt, dass die Sterblichkeitsrate in Südamerika am höchsten und in Australien am niedrigsten von allen Ländern ist. 

Texttabelle importieren

Installieren Sie texttable, um eine einfache ASCII-Tabelle zu erstellen. Dann importieren Sie sie als tt.

!pip install texttable

importieren Sie texttable als tt

Ein Texttable-Objekt erstellen

Sie müssen ein Texttable-Objekt wie unten gezeigt erstellen. Fügen Sie am Anfang der Tabelle eine leere Zeile für die Überschriften hinzu und richten Sie die Spalten aus.

Tabelle = tt.Texttable() 

table.add_rows([(None, None, None, None)] + data) table.set_cols_align(('c', 'c', 'c', 'c '))  # 'l' steht für links, 'c' für Mitte und 'r' für rechts 
table.header((' Land ', ' Anzahl der Fälle ', ' Todesfälle ', ' Kontinent ')) 
  
print(table.draw())

Hier stellt die Ausgabe einige der Zeilen der Tabelle wie folgt dar.

Schlussfolgerung

Mit Web Scraping können Sie schnell und effizient große Datenmengen aus Websites extrahieren. Sie können die extrahierten unstrukturierten Daten in ein brauchbares Format wie eine .csv-Datei konvertieren. Wir haben gesehen, dass wir mit zwei Modulen, nämlich Pandas und BeautifulSoup, Daten aus dem Web extrahieren können. Mit Proxies können Sie die Daten anonym aus dem Internet extrahieren. Sie können für das Web-Scraping entweder Proxys aus dem Rechenzentrum oder aus dem Haus verwenden. Die Proxys für Privatanwender sind zuverlässiger, aber teurer als die Proxys für Rechenzentren. Außerdem können wir eine Datenanalyse durchführen, um aufschlussreiche Informationen für unsere Bedürfnisse zu erhalten. In diesem Artikel haben wir die Daten mit Hilfe von Datenvisualisierungstools wie Balkendiagrammen, Paardiagrammen und Streudiagrammen analysiert.