Wie man einen Web-Crawler in weniger als 100 Codezeilen erstellt
Raluca Penciuc am 13. August 2021
Wir leben in einem digitalen Zeitalter und haben Zugang zu einer Unmenge von Daten. Mit diesen Informationen können wir besser verstehen, wie wir arbeiten, spielen, lernen und leben. Wäre es nicht schön, wenn man gezieltere Informationen zu einem bestimmten Thema erhalten könnte?
In diesem Artikel zeigen wir, wie man BeautifulSoup und WebScrapingAPI zusammen verwendet, um eigene Crawler für das Sammeln von gezielten Daten von Websites zu erstellen.
Ein Wort der Warnung: Das Scrapen von urheberrechtlich geschützten Inhalten oder persönlichen Informationen ist in den meisten Fällen illegal. Um sicher zu sein, ist es besser, die ausdrückliche Zustimmung einzuholen, bevor Sie eine Website scrapen, insbesondere Social-Media-Seiten.
Was sind Webcrawler?
Es gibt zahlreiche Suchmaschinen, und wir alle nutzen sie. Ihre Dienste sind einfach zu benutzen - man fragt einfach nach etwas, und sie suchen überall im Web nach einer Antwort für einen. Hinter dem Vorhang ist es Googles Googlebot Crawler, der Googles Suchmaschine so erfolgreich macht.
Indem sie das Web nach Seiten durchsuchen, die den eingegebenen Schlüsselwörtern entsprechen, helfen Crawler den Suchmaschinen, diese Seiten zu katalogisieren und sie später durch Indizierung wiederzufinden. Suchmaschinen verlassen sich auf Crawler, um Website-Informationen zu sammeln, einschließlich URLs, Hyperlinks, Meta-Tags und Artikel, sowie den HTML-Text zu untersuchen.
Da der Bot in der Lage ist, nachzuverfolgen, was er bereits aufgerufen hat, müssen Sie sich keine Sorgen machen, dass er auf unbestimmte Zeit auf der gleichen Webseite hängen bleibt. Das öffentliche Internet und die Auswahl der Inhalte stellen Webcrawler vor mehrere Herausforderungen. Jeden Tag werden auf bestehenden Websites Dutzende von neuen Informationen veröffentlicht, und ich will gar nicht erst anfangen zu zählen, wie viele neue Websites täglich erscheinen.
Schließlich müssten sie dafür Millionen von Seiten durchsuchen und ihre Indizes ständig aktualisieren. Die Systeme, die den Inhalt von Websites analysieren, sind auf sie angewiesen, sie sind also unverzichtbar.
Crawler sind also wichtig, aber warum erwähnen wir sie? Weil wir unseren eigenen Bot entwickeln werden, der uns bei der Datenextraktion hilft. Auf diese Weise können wir uns darauf verlassen, dass er URLs abruft, anstatt sie manuell in den Scraper einzugeben. Mehr Automatisierung, woo!
Einrichtung
Nachdem wir nun ein grundlegendes Verständnis von Webcrawlern haben, fragen Sie sich vielleicht, wie das alles in Aktion aussieht. Nun, gehen wir der Sache auf den Grund!
Als Erstes müssen wir unsere Arbeitsumgebung einrichten. Stellen Sie sicher, dass Ihr Rechner die folgenden Voraussetzungen erfüllt:
- python3;
- Eine Python-IDE. In dieser Anleitung wird Visual Studio Code verwendet, weil es leichtgewichtig ist und keine zusätzliche Konfiguration erfordert. Der Code ist dennoch IDE-agnostisch, so dass Sie jede IDE wählen können, mit der Sie vertraut sind;
Zu guter Letzt benötigen wir noch einen API-Schlüssel. Sie können ein kostenloses WSA-Konto erstellen, mit dem Sie in den ersten 14 Tagen 5000 API-Aufrufe erhalten. Sobald Sie sich registriert haben, navigieren Sie einfach zu Ihrem Dashboard, wo Sie Ihren API-Schlüssel und andere wertvolle Ressourcen finden können.

Die Entwicklung des Crawlers
Gut, wir haben die Werkzeuge, also sind wir näher dran, mit dem Aufbau unseres Crawlers zu beginnen. Aber wie werden wir ihn nutzen? Die Umsetzung kann je nach unserem endgültigen Ziel unterschiedlich sein.
Wählen Sie eine Website und prüfen Sie den HTML-Code
Für dieses Tutorial haben wir eine E-Commerce-Website ausgewählt , die Zero-Waste-Produkte für verschiedene Zwecke verkauft. Wir werden durch alle Seiten navigieren, die Produktliste jeder Seite extrahieren und schließlich die Daten für jede Seite in einer CSV-Datei speichern.
Dazu müssen wir zunächst einen Blick auf die Seitenstruktur werfen und unsere Strategie festlegen. Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle der Seite, dann auf "Element inspizieren", und die "Entwicklerkonsole" wird geöffnet. Hier können Sie das HTML-Dokument der Website sehen, das alle Daten enthält, die wir brauchen.

Den Crawler aufbauen
Ok, jetzt können wir etwas Code schreiben!
Öffnen Sie zunächst ein Terminal-Fenster in Ihrer IDE und führen Sie den folgenden Befehl aus, der BeautifulSoup installiert, eine Bibliothek, die uns hilft, die Daten aus dem HTML zu extrahieren:
> pip install beautifulsoup4
Erstellen Sie dann einen Ordner mit dem Namen "Produkte". Er hilft bei der Organisation und Speicherung der Scraping-Ergebnisse in mehreren CSV-Dateien.
Schließlich erstellen Sie die Datei "crawler.py". Hier schreiben wir unseren gesamten Code und die Crawling-Logik hinein. Wenn wir fertig sind, können wir die Datei mit dem folgenden Befehl ausführen:
> py crawler.py
Lassen Sie uns die benötigten Bibliotheken importieren und dann einige globale Variablen definieren:
import requests
from bs4 import BeautifulSoup
import csv
BASE_URL = "https://www.shopetee.com"
SECTION = "/collections/all-collections"
FULL_START_URL = BASE_URL + SECTION
ENDPOINT = "https://api.webscrapingapi.com/v1/"
API_KEY = "API_KEY"
Lassen Sie uns nun den Einstiegspunkt für unseren Crawler definieren:
def crawl(url, filename):
page_body = get_page_source(url, filename)
soup = BeautifulSoup(page_body, 'html.parser')
start_crawling(soup, filename)
crawl(FULL_START_URL, 'etee-page1.txt')
Wir implementieren die Crawl-Funktion, die die HTML-Dokumente über unsere get_page_source-Prozedur extrahiert. Dann wird das BeautifulSoup-Objekt erstellt, das uns das Parsen erleichtert, und die Funktion start_crawling aufgerufen, die mit der Navigation auf der Website beginnt.
def get_page_source(url, filename):
params = {
"api_key": API_KEY,
"url": url,
"render_js": '1'
}
page = requests.request("GET", ENDPOINT, params=params)
soup = BeautifulSoup(page.content, 'html.parser')
body = soup.find('body')
file_source = open(filename, mode='w', encoding='utf-8')
file_source.write(str(body))
file_source.close()
return str(body)
As stated earlier, the get_page_source function will use WebScrapingAPI to get the HTML content of the website and will write in a text file in the <body> section, as it’s the one containing all the information we are interested in.
Lassen Sie uns nun einen Schritt zurückgehen und prüfen, wie wir unsere Ziele erreichen können. Die Produkte sind in Seiten organisiert, so dass wir jede Seite wiederholt aufrufen müssen, um sie alle zu extrahieren.
Das bedeutet, dass unser Crawler einige rekursive Schritte durchführt, solange es verfügbare Seiten gibt. Um diese Logik in Code umzusetzen, müssen wir uns ansehen, wie der HTML-Code diese Bedingungen beschreibt.
Wenn Sie zur Entwicklerkonsole zurückkehren, können Sie sehen, dass jede Seitennummer eigentlich ein Link zu einer neuen Seite ist. Außerdem ist der Pfeil nach links deaktiviert, da wir uns auf der ersten Seite befinden und es keine weiteren Seiten vor dieser gibt.

Der folgende Algorithmus muss also:
- Rufen Sie die Seite auf;
- Extrahieren Sie die Daten (wir werden dies im nächsten Schritt umsetzen);
- Suchen Sie den Paginierungscontainer im HTML-Dokument; prüfen Sie, ob der Pfeil "Nächste Seite" deaktiviert ist, und wenn nicht, rufen Sie den neuen Link und die Crawl-Funktion für die neue Seite auf.
def start_crawling(soup, filename):
extract_products(soup, filename)
pagination = soup.find('ul', {'class': 'pagination-custom'})
next_page = pagination.find_all('li')[-1]
if next_page.has_attr('class'):
if next_page['class'] == ['disabled']:
print("You reached the last page. Stopping the crawler...")
else:
next_page_link = next_page.find('a')['href']
next_page_address = BASE_URL + next_page_link
next_page_index = next_page_link[next_page_link.find('=') + 1]
crawl(next_page_address, f'etee-page{next_page_index}.txt')
Daten extrahieren und in CSV exportieren
Zum Schluss wollen wir sehen, wie wir die benötigten Daten extrahieren können. Wir werfen noch einen Blick auf das HTML-Dokument und sehen, dass wir die wertvollen Informationen über die Klassennamen abrufen können.

Wir extrahieren den Namen des Produkts, die Bewertung, die Anzahl der Rezensionen und den Preis, aber Sie können so weit gehen, wie Sie wollen.
Erinnern Sie sich an den Ordner "Produkte", den wir vorhin erstellt haben? Wir werden nun eine CSV-Datei erstellen, um die Daten zu exportieren, die wir von jeder Seite abrufen. Der Ordner wird uns helfen, die Daten zu organisieren.
def extract_products(soup, filename):
csv_filename = filename.replace('.txt', '.csv')
products_file = open(f'products/{csv_filename}', mode='a', encoding='utf-8', newline='')
products_writer = csv.writer(products_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
products_writer.writerow(['Title', 'Rating', 'Reviews', 'Price on sale'])
products = soup.find_all('div', {'class': 'product-grid-item'})
for product in products:
product_title = product.find('div', {'class': 'item-title'}).getText().strip()
product_rating = product.find('span', {'class': 'jdgm-prev-badge__stars'})['data-score']
product_reviews = product.find('span', {'class': 'jdgm-prev-badge__text'}).getText().strip()
product_price_on_sale = product.find('span', {'class': 'money'}).getText()
products_writer.writerow([product_title, product_rating, product_reviews, product_price_on_sale])
Nachdem Sie das Programm ausgeführt haben, können Sie alle extrahierten Informationen in den neu erstellten Dateien sehen.

Abschließende Gedanken
Und das war's auch schon! Wir haben gerade unseren eigenen Web-Crawler mit BeautifulSoup und WebScrapingAPI von Python in weniger als 100 Zeilen Code erstellt. Das kann natürlich je nach Komplexität Ihrer Aufgabe variieren, aber für einen Crawler, der durch die Seiten einer Website navigiert, ist das ein ziemlich guter Deal.
Für diesen Leitfaden haben wir die kostenlose Testversion von WebScrapingAPI verwendet, die in den ersten 14 Tagen 5000 API-Aufrufe ermöglicht - mehr als genug, um einen leistungsfähigen Crawler zu entwickeln.
Es war hilfreich, sich nur auf die Logik des Crawlers zu konzentrieren, anstatt sich über die verschiedenen Herausforderungen beim Web Scraping Gedanken zu machen. Das ersparte uns Zeit, Energie und erhebliche andere Kosten, wie z. B. die Verwendung unserer eigenen Proxys - nur einige Vorteile, die man durch die Verwendung einer API für Web-Scraping erzielen kann.
Nachrichten und Aktualisierungen
Bleiben Sie auf dem Laufenden mit den neuesten Web Scraping-Anleitungen und Nachrichten, indem Sie unseren Newsletter abonnieren.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Ähnliche Artikel

Erfahren Sie, wie Sie mit Hilfe von Datenparsing, HTML-Parsing-Bibliotheken und schema.org-Metadaten effizient Daten für Web-Scraping und Datenanalysen extrahieren und organisieren können.


In diesem Tutorial wird gezeigt, wie man mit Python das Web crawlen kann. Web-Crawling ist ein leistungsfähiger Ansatz zum Sammeln von Daten aus dem Web, indem alle URLs für eine oder mehrere Domänen gefunden werden.


Lernen Sie, wie Sie mit Python HTML-Tabellen im Internet auslesen können: Daten extrahieren, speichern und analysieren | Einsteigerfreundliches Tutorial
