Web Scraping, reguläre Ausdrücke und Datenvisualisierung, alles in Python

Python, Scraping, Nov-15-20225 Min. gelesen

Web Scraping kann als Methode zur Sammlung und Umstrukturierung von Daten aus Websites definiert werden. Es kann auch als programmatischer Ansatz zur automatisierten Beschaffung von Website-Daten definiert werden. Sie möchten zum Beispiel die E-Mail-IDs aller Personen extrahieren, die einen Facebook-Post kommentiert haben. Dies können Sie tun, indem Sie

Inhaltsübersicht

Web Scraping kann als Methode zur Sammlung und Umstrukturierung von Daten aus Websites definiert werden. Es kann auch als programmatischer Ansatz zur automatisierten Beschaffung von Website-Daten definiert werden. Ein Beispiel: Sie möchten die E-Mail-IDs aller Personen extrahieren, die einen Facebook-Post kommentiert haben. Dazu gibt es zwei Methoden. Erstens können Sie mit dem Cursor auf die E-Mail-Adressen einer beliebigen Person zeigen. Dann können Sie sie kopieren und in eine Datei einfügen. Diese Methode wird als manuelles Scraping bezeichnet. Was aber, wenn Sie 2000 E-Mail-IDs sammeln wollen? Mit Hilfe eines Web-Scraping-Tools können Sie alle E-Mail-IDs in 30 Sekunden extrahieren, anstatt 3 Stunden, wenn Sie manuelles Scraping verwenden.

Sie können Web-Scraping-Tools verwenden, um Informationen aus Websites zu extrahieren. Sie müssen nur wissen, wie man klickt, und es sind keine Programmierkenntnisse erforderlich. Diese Tools sind ressourcenschonend und sparen Zeit und Kosten. Sie können je nach Bedarf Millionen von Seiten scrapen, ohne sich Gedanken über die Netzwerkbandbreite zu machen. Einige Websites setzen Anti-Bots ein, die Scraper davon abhalten, Daten zu sammeln. Gute Web-Scraping-Tools verfügen jedoch über integrierte Funktionen, um diese Tools zu umgehen und ein nahtloses Scraping-Erlebnis zu bieten.

Web Scraping in Python

Python verfügt über ausgezeichnete Werkzeuge zum Auslesen von Daten aus dem Web. Sie können zum Beispiel die requests-Bibliothek importieren, um Inhalte von einer Webseite abzurufen, und bs4(BeautifulSoup), um die relevanten Informationen zu extrahieren. Sie können die folgenden Schritte befolgen, um Web-Scraping in Python durchzuführen. Wir werden Informationen von dieser Website extrahieren. 

Einfuhranträge:

Sie müssen die Anforderungsbibliothek importieren, um den HTML-Code der Website abzurufen. 

Einfuhranträge

GET-Anfrage:

Sie müssen eine GET-Anfrage an die Website stellen. Sie können dies tun, indem Sie die URL in die Funktion requests.get() einfügen.

r = requests.get('http://www.cleveland.com/metro/index.ssf/2017/12/case_western_reserve_university_president_barbara_snyders_base_salary_and_bonus_pay_tops_among_private_colleges_in_ohio.html')

Extrahieren Sie den Inhalt:

Extrahieren Sie den Inhalt der Website mit r.content. Es gibt den Inhalt der Website in Bytes an. 

c = r.Inhalt

BeautifulSoup importieren:

Sie müssen die BeautifulSoup-Bibliothek importieren, da sie das Scrapen von Informationen aus Webseiten erleichtert.

von bs4 importieren BeautifulSoup

Erstellen Sie ein Suppenobjekt:

Sie müssen ein BeautifulSoup-Objekt aus dem Inhalt erstellen und es mit verschiedenen Methoden analysieren.

soup = BeautifulSoup(c)
print(soup.get_text())

Sie erhalten die Ausgabe (es ist nur ein Teil) in etwa so.

Nützliche Daten extrahieren:

Wir müssen die richtigen CSS-Selektoren finden, da wir unsere gewünschten Daten extrahieren müssen. Wir können den Hauptinhalt der Webseite mit der Methode .find() des Soup-Objekts finden.

main_content = soup.find('div', attrs = {'class': 'entry-content'})

Verwenden Sie das Attribut .text:

Wir können die Informationen als Text aus der Tabelle abrufen, indem wir das Attribut .text der Soup verwenden.

Inhalt = main_content.find('ul').text
print(inhalt)

Wir haben den Text der Tabelle als Zeichenkette abgerufen. Die Informationen werden jedoch von großem Nutzen sein, wenn wir die spezifischen Teile der Textzeichenfolge extrahieren. Um diese Aufgabe zu erfüllen, müssen wir uns mit regulären Ausdrücken beschäftigen.

Reguläre Ausdrücke in Python

Reguläre Ausdrücke (RegEx) sind eine Folge von Mustern, die ein Suchmuster definieren. Die Grundidee ist die folgende:

  • Definieren Sie ein Muster, das Sie in einer Textzeichenfolge abgleichen möchten. 
  • Suche in der Zeichenkette, um Übereinstimmungen zu finden.

Angenommen, wir wollen die folgenden Informationen aus der Texttabelle extrahieren.

  • Gehälter
  • Namen der Hochschulen
  • Namen der Präsidenten

Sie können die drei Informationen mit den unten aufgeführten Schritten extrahieren.

Schritt 01:

Importieren Sie re, und um die Gehälter zu extrahieren, müssen Sie ein Gehaltsmuster erstellen. Verwenden Sie die Methode re.compile(), um ein als String übergebenes Muster eines regulären Ausdrucks in ein RegEx-Musterobjekt zu kompilieren. Außerdem können Sie pattern.findall() verwenden, um alle Übereinstimmungen zu finden und sie als eine Liste von Strings zurückzugeben. Jede Zeichenkette steht für eine Übereinstimmung.

re importieren 
salary_pattern = re.compile(r'\$.+')
gehalt = gehalt_muster.findall(inhalt)

Schritt 02:

Wiederholen Sie das gleiche Verfahren, um die Namen der Hochschulen zu extrahieren. Erstellen Sie ein Muster und extrahieren Sie die Namen. 

school_pattern = re.compile(r'(?:,|,\s)([A-Z]{1}.*?)(?:\s\(|:|,)')
schools = school_pattern.findall(content)
print(schools)
print(salaries)

Schritt 03:

Wiederholen Sie das gleiche Verfahren, um die Namen der Präsidenten zu extrahieren. Erstellen Sie ein Muster und extrahieren Sie die gewünschten Namen. 

name_pattern = re.compile(r'^([A-Z]{1}.+?)(?:,)', flags = re.M)
names = name_pattern.findall(content)
print(names)

Schritt 04:

Die Gehälter sehen unübersichtlich aus und sind nicht verständlich. Daher verwenden wir das Listenverständnis von Python, um die String-Gehälter in Zahlen zu konvertieren. Wir werden String-Slicing, Split und Join sowie List Comprehension verwenden, um die gewünschten Ergebnisse zu erzielen.

salaries = ['$876,001', '$543,903', '$2453,896']
[int(''.join(s[1:].split(','))) for s in salaries]

Die Ausgabe ist wie folgt:

Datenvisualisierung in Python

Datenvisualisierung hilft Ihnen, die Daten visuell zu verstehen, so dass Trends, Muster und Korrelationen aufgedeckt werden können. Sie können eine große Datenmenge in Grafiken, Diagramme und andere visuelle Darstellungen übersetzen, um Ausreißer zu identifizieren und wertvolle Erkenntnisse zu gewinnen.

Wir können matplotlib verwenden, um die Daten zu visualisieren, wie unten gezeigt.

Importieren Sie die erforderlichen Bibliotheken wie unten dargestellt.

import pandas as pd
import matplotlib.pyplot as plt

Erstellen Sie einen Pandas-Datenrahmen mit Schulen, Namen und Gehältern. Zum Beispiel können Sie die Schulen in einen Datenrahmen konvertieren als:

df_school = pd.DataFrame(schools)
print(df_school)

Die Ausgabe ist:

Das Gleiche gilt für die Gehälter und Namen.

Zur Visualisierung der Daten können wir ein Balkendiagramm wie unten dargestellt erstellen.

df.plot(kind='barh', x = 'Präsident', y = 'Gehalt')

Die Ausgabe ist wie folgt:

Warum werden Proxies für Web Scraping benötigt?

Web Scraping hilft Unternehmen, nützliche Informationen über Marktkenntnisse und Branchen zu gewinnen, um datengestützte Dienste anzubieten und datengesteuerte Entscheidungen zu treffen. Proxys sind wichtig, um Daten von verschiedenen Websites aus den folgenden Gründen effektiv zu scrapen.

  • Vermeidung von IP-Sperren - Um die Scraper davon abzuhalten, zu viele Anfragen zu stellen, begrenzen die Unternehmenswebsites die Menge der crawlbaren Daten, die als Crawl-Rate bezeichnet wird. Die Crawl-Rate verlangsamt die Geschwindigkeit der Website, und es wird für den Benutzer schwierig, den gewünschten Inhalt effektiv zu erreichen. Wenn Sie jedoch einen ausreichenden Pool von Proxys verwenden, um die Daten zu crawlen, können Sie die Ratenbeschränkungen auf der Zielwebsite umgehen. Das liegt daran, dass die Proxys Anfragen von verschiedenen IP-Adressen aus senden und es Ihnen so ermöglichen, Daten von Websites entsprechend Ihren Anforderungen zu extrahieren.
  • Ermöglichung des Zugangs zu regionsspezifischen Inhalten - Unternehmen müssen ihre Konkurrenten (Websites) überwachen, um den Kunden in einer bestimmten geografischen Region geeignete Produktmerkmale und Preise anbieten zu können. Sie können auf alle in dieser Region verfügbaren Inhalte zugreifen, indem sie Wohn-Proxys mit IP-Adressen verwenden.
  • Erhöhte Sicherheit - Ein Proxyserver bietet eine zusätzliche Sicherheitsebene, indem er die IP-Adresse des Geräts des Benutzers verbirgt.

Wissen Sie, wie viele Vollmachten Sie benötigen, um die oben genannten Vorteile zu erhalten? Sie können die benötigte Anzahl von Proxys mit dieser Formel berechnen:

Anzahl der Bevollmächtigten = Anzahl der Zugriffsanfragen / Crawl-Rate

Die Anzahl der Zugriffsanfragen hängt von den folgenden Parametern ab.

  • Die Häufigkeit, mit der der Scraper Informationen von einer Website extrahiert
  • Anzahl der Seiten, die der Benutzer scrapen möchte

Andererseits wird die Crawl-Rate durch die Anzahl der Anfragen des Nutzers in einer bestimmten Zeitspanne begrenzt. Einige Websites lassen eine begrenzte Anzahl von Anfragen pro Benutzer zu, um zwischen automatisierten und menschlichen Benutzeranfragen zu unterscheiden. 

Verwendung von Proxies in Python

Sie können Proxys in Python verwenden, indem Sie die folgenden Schritte ausführen.

  • Sie müssen das Python-Modul für Anfragen importieren.
Einfuhranträge
  • Sie können einen Pool von Stellvertretern erstellen, um diese zu rotieren.
proxy = 'http://114.121.248.251:8080'
url = 'https://ipecho.net/plain'
  • Sie können requests.get() verwenden, um eine GET-Anfrage zu senden, indem Sie einen Proxy als Parameter an die URL übergeben.
page = requests.get(url,
                    proxies={"http": proxy, "https": proxy})
  • Sie können den Inhalt der angeforderten URL abrufen, wenn kein Verbindungsfehler vorliegt.
drucken(Seite.Text)

Die Ausgabe ist wie folgt:

Schlussfolgerung

Wir haben besprochen, dass wir Web-Scraping verwenden können, um Daten aus Websites zu extrahieren, anstatt sie manuell zu scrapen. Web Scraping ist ein kosteneffizienter und zeitsparender Prozess. Unternehmen nutzen es, um Webinformationen zu sammeln und umzustrukturieren, um datengestützte Entscheidungen zu treffen und wertvolle Erkenntnisse zu gewinnen. Die Verwendung von Proxys ist für sicheres Web-Scraping unerlässlich, da sie die ursprüngliche IP-Adresse des Benutzers vor der Ziel-Website verbergen. Sie können für das Web-Scraping Proxys in Rechenzentren oder in Privathaushalten verwenden. Bevorzugen Sie jedoch Proxys in Wohngebieten, da sie schnell sind und nicht leicht entdeckt werden können. Darüber hinaus können wir in Python reguläre Ausdrücke verwenden, um Zeichenketten zu finden oder abzugleichen. Das bedeutet, dass wir mit Hilfe regulärer Ausdrücke beliebige Zeichenkettenmuster aus einem Text extrahieren können. Wir haben auch gesehen, dass Datenvisualisierung große Datenmengen in Diagramme, Grafiken und andere visuelle Darstellungen umwandelt, die uns helfen, Anomalien zu erkennen und nützliche Trends in den Daten zu identifizieren.