{"id":176865,"date":"2023-05-26T21:01:51","date_gmt":"2023-05-26T20:01:51","guid":{"rendered":"https:\/\/liora.io\/de\/?p=176865"},"modified":"2026-02-06T06:45:45","modified_gmt":"2026-02-06T05:45:45","slug":"python-web-scraping-scrapy-alles-ueber-das-tool","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/python-web-scraping-scrapy-alles-ueber-das-tool","title":{"rendered":"Python Web Scraping Scrapy: Alles \u00fcber das Tool"},"content":{"rendered":"<p><strong>Beim Surfen im Internet ist es auf vielen Seiten nicht m\u00f6glich, Daten direkt f\u00fcr den pers\u00f6nlichen Gebrauch zu speichern. Die einfachste L\u00f6sung in diesem Fall ist einfach das manuelle Kopieren und Einf\u00fcgen der Daten, was schnell m\u00fchsam und zeitaufwendig werden kann. Aus diesem Grund werden h\u00e4ufig Web Scraping-Techniken eingesetzt, um Daten von Webseiten zu extrahieren.<\/strong><\/p>\nWeb Scraping ist die Automatisierung des Prozesses der fast automatischen Extraktion von Daten aus Webseiten. Dies geschieht mithilfe von Scraping-Tools, die oft auch als Web Scraper bezeichnet werden. Diese erm\u00f6glichen dann das Laden und Extrahieren spezifischer Daten von Websites entsprechend den Bed\u00fcrfnissen der Nutzer. Sie werden meist f\u00fcr eine einzelne Website ma\u00dfgeschneidert und dann so konfiguriert, dass sie auch mit anderen Websites funktionieren, die die gleiche Struktur haben.\n\nZusammen mit der Programmiersprache Python sind <a href=\"https:\/\/pypi.org\/project\/beautifulsoup4\/\"><strong>BeautifulSoup<\/strong><\/a> und <b>Scrapy Crawler <\/b>die am h\u00e4ufigsten verwendeten Tools im Bereich des Web Scrapings. In diesem Artikel werden wir einige Unterschiede zwischen den beiden Tools vorstellen und uns dann auf Scrapy konzentrieren.\n<h3>Web Scraping vs Web Crawling<\/h3>\nBevor wir zum eigentlichen Thema kommen, ist es interessant, den Unterschied zwischen den Techniken Web Scraping und Web Crawling zu verstehen:\n<h4>Das Web Scraping<\/h4>\nBeim <a href=\"https:\/\/liora.io\/de\/web-scraping-theorie-und-anwendung-fuer-jedermann\">Web Scraping<\/a> werden Roboter eingesetzt, um eine Webseite programmatisch zu analysieren und Inhalte zu extrahieren. Beim Web Scraping ist es daher notwendig, gezielt nach Daten zu suchen.\n\nBeispiel f\u00fcr Web Scraping: Extraktion von Preisen f\u00fcr verschiedene spezifische Produkte auf der Amazon-Website oder einer anderen <a href=\"https:\/\/liora.io\/de\/die-verwendung-von-data-science-im-e-commerce\">E-Commerce-Website.<\/a>\n<h4>Das Web Crawling<\/h4>\nDer Begriff Crawling wird als Analogie zur Art und Weise verwendet, wie eine Spinne krabbelt (dies ist auch der Grund, warum Webcrawler oft als Spider bezeichnet werden).\n\nWeb Crawling Tools werden auch Roboter (Bots, die Crawler genannt werden) einsetzen, um das World Wide Web systematisch zu durchsuchen, normalerweise mit dem Ziel, es zu indexieren.\n\nDabei wird eine Seite in ihrer Gesamtheit betrachtet und jedes Element auf ihr referenziert, einschlie\u00dflich des letzten Buchstabens und des letzten Punktes der Seite. Die verwendeten Bots werden dann, w\u00e4hrend sie durch Unmengen von Daten und Informationen navigieren, die Informationen, die sich in den tiefsten Schichten befinden, lokalisieren und abrufen.\n\nAls Beispiel f\u00fcr <strong>Web Crawling-Tools<\/strong> k\u00f6nnen alle Suchmaschinen wie Google, Yahoo oder Bing genannt werden. Diese crawlen Webseiten und nutzen die extrahierten Informationen, um diese zu indexieren.\n\nAuch interessant:\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"268\"><\/colgroup>\n<tbody>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Deep Neural Network&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/deep-neural-network\"><a href=\"https:\/\/liora.io\/de\/deep-neural-network\" target=\"_blank\" rel=\"noopener\">Deep Neural Network<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Deep Learning vs. Machine Learning&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/deep-learning-vs-machine-learning\"><a href=\"https:\/\/liora.io\/de\/deep-learning-vs-machine-learning\" target=\"_blank\" rel=\"noopener\">Deep Learning vs. Machine Learning<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Deep Learning - was ist das eigentlich ?&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/deep-learning-oder-tiefes-lernen-was-ist-das-denn\"><a href=\"https:\/\/liora.io\/de\/deep-learning-oder-tiefes-lernen-was-ist-das-denn\" target=\"_blank\" rel=\"noopener\">Deep Learning &#8211; was ist das eigentlich ?<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Deep Fake Gefahren&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/deep-fake-gefahren-massnahmen-und-rechtslage\"><a href=\"https:\/\/liora.io\/de\/deep-fake-gefahren-massnahmen-und-rechtslage\" target=\"_blank\" rel=\"noopener\">Deep Fake Gefahren<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Python Deep Learning Basics&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/python-deep-learning-die-basics\"><a href=\"https:\/\/liora.io\/de\/python-deep-learning-die-basics\" target=\"_blank\" rel=\"noopener\">Python Deep Learning Basics<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Style Transfer Deep Learning&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/style-transfer-deep-learning\"><a href=\"https:\/\/liora.io\/de\/style-transfer-deep-learning\" target=\"_blank\" rel=\"noopener\">Style Transfer Deep Learning<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>BeautifulSoup vs Scrapy<\/h3>\nWeiter geht es mit einem kurzen Vergleich zwischen BeautifulSoup und Scrapy, den beiden meistgenutzten Bibliotheken f\u00fcr Web Scraping.\n<h4>&#8211; BeautifulSoup<\/h4>\nBeautifulSoup ist eine beliebte <a href=\"https:\/\/liora.io\/de\/top-10-der-python-bibliotheken-fur-data-scientists\">Python-Bibliothek<\/a>, mit der du <strong>HTML- oder XML-Dokumente<\/strong> analysieren kannst, um sie mithilfe einer Baumstruktur oder in Form eines W\u00f6rterbuchs zu beschreiben. Diese erm\u00f6glicht es dann, bestimmte Daten auf Webseiten leicht zu finden und zu extrahieren. BeautifulSoup ist recht einfach zu erlernen und verf\u00fcgt \u00fcber eine gute und umfassende Dokumentation, die das Lernen leicht macht.\n<h4>Die Vorteile von BeautifulSoup :<\/h4>\nSehr gute Dokumentation (sehr hilfreich, wenn man gerade erst anf\u00e4ngt).\nGro\u00dfe Gemeinschaft von Nutzern.\nF\u00fcr Anf\u00e4nger leicht zu erlernen und zu beherrschen.\n<h4>Nachteile:<\/h4>\nAbh\u00e4ngigkeit von anderen externen Python-Bibliotheken.\n<h4>Scrapy<\/h4>\nScrapy ist ein kompletter <a href=\"https:\/\/liora.io\/de\/open-source-definition\">Open-Source-Framework<\/a> und geh\u00f6rt zu den leistungsf\u00e4higsten Bibliotheken, die f\u00fcr die Datenextraktion im Internet verwendet werden. Scrapy enth\u00e4lt nativ Funktionen, um Daten aus HTML- oder XML-Quellen mithilfe von CSS- und XPath-Ausdr\u00fccken zu extrahieren.\n<h4>Einige Vorteile von Scrapy :<\/h4>\nEffizient in Bezug auf Speicher und CPU.\nEingebaute Funktionen f\u00fcr die Datenextraktion.\nLeicht erweiterbar f\u00fcr gro\u00dfe Projekte.\nZiemlich leistungsstark und schnell im Vergleich zu anderen Bibliotheken.\n\nAls Nachteile sind die geringe Dokumentation zu nennen, die Anf\u00e4nger entmutigen kann.\n\nUm alle oben genannten Punkte zusammenzufassen:\n\n<style type=\"text\/css\">\n.tg {border-collapse:collapse;border-spacing:0;}<br \/>\n.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;<br \/>\n  overflow:hidden;padding:10px 5px;word-break:normal;}<br \/>\n.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;<br \/>\n  font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}<br \/>\n.tg .tg-8xxg{background-color:#9b9b9b;border-color:inherit;font-size:22px;font-weight:bold;text-align:center;vertical-align:top}<br \/>\n.tg .tg-0pky{border-color:inherit;text-align:left;vertical-align:top}<br \/>\n<\/style>\n<table style=\"undefined;table-layout: fixed; width: 800px\">\n<colgroup>\n<col style=\"width: 400px\">\n<col style=\"width: 400px\">\n<\/colgroup>\n<thead>\n<tr>\n<th>Scrapy<\/th>\n<th>BeautifulSoup<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\n<ul>\n \t<li>Ein Framework<\/li>\n \t<li>Hohe Verarbeitungsgeschwindigkeit durch eingebaute Funktionen<\/li>\n \t<li>Beste Wahl f\u00fcr komplexe Projekte und Aufgaben<\/li>\n \t<li>Scrapy ist komplexer als BeautifulSoup<\/li>\n \t<li>Funktioniert viel mehr wie ein Referenzierer (Spider = Python-Klassen, mit denen man definieren kann, was man referenzieren soll, wie man es tun soll und wie man die Informationen extrahieren kann)<\/li>\n \t<li>Einbindung von Funktionen zur Erstellung von Pipelines<\/li>\n<\/ul>\n<\/td>\n<td>\n<ul>\n \t<li>Python-Library \/ -Modul<\/li>\n \t<li>Kann je nach Komplexit\u00e4t der Aufgabe langsam werden<\/li>\n \t<li>Ideal f\u00fcr kleine Projekte<\/li>\n \t<li>Ideal f\u00fcr Anf\u00e4nger<\/li>\n \t<li> Wird als Synthax-Parser betrachtet.<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2023\/04\/image3-2.png\" title=\"\" alt=\"\" loading=\"lazy\">\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\">Scrapy und BeautifulSoup lernen<\/a><\/div><\/div>\n\n<h3>Scrapy-Architektur<\/h3>\nWenn ein Projekt erstellt wird, gibt es verschiedene Dateien, die mit den Hauptkomponenten von Scrapy interagieren. Die Architektur von <strong>Scrapy,<\/strong> wie sie in der offiziellen Dokumentation beschrieben wird, ist unten zu sehen:\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1042\" height=\"621\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image9-1.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image9-1.png 1042w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image9-1-300x179.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image9-1-1024x610.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image9-1-768x458.png 768w\" sizes=\"(max-width: 1042px) 100vw, 1042px\"><figcaption><\/figcaption><\/figure>\nWenn wir das Architekturdiagramm von Scrapy analysieren, sehen wir, dass sein zentrales Element, die Engine oder der Motor, vier ausf\u00fchrende Komponenten steuert:\n<ul>\n \t<li>Die Spiders<\/li>\n \t<li>Die Item Pipelines<\/li>\n \t<li>Der Downloader<\/li>\n \t<li>Der Scheduler<\/li>\n<\/ul>\nZu Beginn des Prozesses erfolgt die Kommunikation \u00fcber die Spider, die Anfragen (mit den zu scrappenden URLs und den zu extrahierenden Informationen) an die Engine weiterleiten. Die Engine leitet die Anfrage an den Scheduler weiter, der sie in der Warteschlange speichert (wenn mehrere <strong>URLs<\/strong> \u00fcbertragen werden).\n\nDie Engine wird auch Anfragen vom Scheduler, der die Aufgaben zuvor angeordnet hat, empfangen, um sie an das Downloader-Modul weiterzuleiten, das den HTML-Code der Seite herunterl\u00e4dt und ihn in ein Response-Objekt umwandelt.\n\nDas Response-Objekt wird dann an den Spider und dann an das ItemPipeline-Modul weitergeleitet. Dieser Vorgang wiederholt sich f\u00fcr die verschiedenen URL-Links der Webseiten.\n\nDie Rollen der Komponenten k\u00f6nnen nun besser definiert werden:\n<ul>\n \t<li>Spiders: Die Klassen, die die verschiedenen Methoden des Scrappings durch die Benutzer definieren. Die Methoden werden dann von Scrapy bei Bedarf aufgerufen.<\/li>\n \t<li>Scrapy Engine: Kontrolliert den Datenfluss und l\u00f6st alle Ereignisse aus.<\/li>\n \t<li>Scheduler: Kommuniziert mit der Engine \u00fcber die Reihenfolge der auszuf\u00fchrenden Aufgaben.<\/li>\n \t<li>Downloader: Empf\u00e4ngt Anfragen von der Engine, um den Inhalt von Webseiten herunterzuladen.<\/li>\n \t<li>ItemPipeline: Abfolgen von Transformationsschritten (zur Bereinigung, Validierung von Daten oder zum Einf\u00fcgen in eine Datenbank), die auf die extrahierten Rohdaten angewendet werden.<\/li>\n<\/ul>\n<h3>Installation von Scrapy<\/h3>\nDie Installation von Scrapy ist recht einfach. F\u00fchre einfach den folgenden Befehl in einem Ubuntu-Terminal aus. Du kannst die Entsprechungen dieser Befehle f\u00fcr andere Betriebssysteme leicht finden:\n\n# Erstellen einer virtuellen Umgebung (OPTIONAL)\nvirtualenv scrapy_env\n\n# Aktivierung der Umgebung (OPTIONAL).\nsource scrapy_env\/bin\/active\n\n# Installation von Scrapy\npip install scrapy\n\n# Test zur \u00dcberpr\u00fcfung der Installation.\nscrapy\n\n# F\u00fchre einen schnellen Benchmark-Test durch, um zu sehen, wie Scrappy auf deiner Hardware funktioniert.\nscrapy bench\n<h3>Die Scrapy-Eingabeaufforderung<\/h3>\nIn der Experimentierphase, d.h. wenn wir nach der Syntax des auszuf\u00fchrenden Codes suchen, um Informationen aus Internetseiten zu extrahieren, hat Scrapy eine spezielle Eingabeaufforderung, die es uns erlaubt, interaktiv mit der Engine zu interagieren: die Scrapy Shell.\n\nDie <strong>Scrapy Shell<\/strong> ist auf Python aufgebaut, sodass wir jedes Modul, das wir ben\u00f6tigen, importieren k\u00f6nnen.\n\nUm auf diese Eingabeaufforderung zuzugreifen (nachdem Scrapy installiert wurde), f\u00fchre einfach den folgenden Befehl aus:\n\n# Ouvrir le shell scrapy\nscrapy shell &#8222;URL-de-la-page-internet&#8220;\n# exemple: scrapy shell &#8222;https:\/\/www.ville-ideale.fr\/abries_5001&#8220;\n\nNach dem Start kannst du in der Shell die Befehle ausf\u00fchren, die die Informationen \u00fcber die angegebene Seite extrahieren. Wir k\u00f6nnen dann interaktiv verschiedene Befehle und Extraktionsans\u00e4tze ausprobieren.\n\nAm Ende der Experimente werden die Codezeilen f\u00fcr die Extraktion in einer Spider-Klasse zur Automatisierung zusammengefasst.\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\">Scrapy lernen<\/a><\/div><\/div>\n\n<h3>Die CSS- und XPATH-Selektoren<\/h3>\nBeim Erstellen einer Spider-Klasse ist der wichtigste Schritt, den Code zu erstellen, der f\u00fcr das Abrufen der Daten verantwortlich ist (der Code, der im vorherigen Schritt von der Scrapy-Shell aus bestimmt wurde).\n\nUm anzugeben, welche Daten von der Website von Scrapy heruntergeladen werden sollen, k\u00f6nnen wir :\n<h5>XPath-Selektoren:<\/h5>\nXPath-Selektoren werden beim Web Scraping aufgrund ihrer gro\u00dfen Bandbreite an M\u00f6glichkeiten sehr h\u00e4ufig verwendet. Zum Beispiel:\n<ul>\n \t<li>Das genaue Element angeben, das von der Seite extrahiert werden soll.<\/li>\n \t<li>Den mit einem Element verbundenen Text abrufen.<\/li>\n \t<li>Das \u00fcbergeordnete oder untergeordnete Element herunterladen.<\/li>\n \t<li>Benachbarte Elemente herunterladen.\nElemente herunterladen, die mit Schl\u00fcsselw\u00f6rtern beginnen\/enden.<\/li>\n \t<li>Elemente abrufen, deren Attribute eine mathematische Bedingung erf\u00fcllen.<\/li>\n<\/ul>\n<ul>\n \t<li aria-level=\"1\">Die CSS-Selektoren:\n\n<strong>CSS-Selektoren<\/strong> sind eine einfachere Alternative f\u00fcr Anf\u00e4nger, insbesondere f\u00fcr diejenigen, die mit den CSS-Befehlen vertraut sind. CSS-Selektoren haben etwas weniger M\u00f6glichkeiten als XPath, aber im Fall von Scrapy wurden sie um eine zus\u00e4tzliche Syntax erweitert, die es erm\u00f6glicht, ein bestimmtes Elementattribut abzurufen.<\/li>\n \t<li aria-level=\"1\">Bibliothek BeautifulSoup:\n\nDa Scrapy in Python geschrieben ist, ist es m\u00f6glich, bei Bedarf andere Bibliotheken zu importieren, um bestimmte Aufgaben zu erledigen. Dies ist der Fall bei der BeautifulSoup-Bibliothek, die bei der Definition der Datenextraktionsklassen (Spiders) verwendet (und somit importiert) werden kann.<\/li>\n<\/ul>\n<h3>Beispiel f\u00fcr die Datenextraktion mit Scrapy<\/h3>\nUm dir einen konkreten Einblick in die M\u00f6glichkeiten von Scrapy zu geben, werden wir einige Daten \u00fcber Liora von der Website <a href=\"https:\/\/fr.trustpilot.com\/review\/liora.io\">https:\/\/fr.trustpilot.com\/review\/liora.io<\/a> abrufen.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1240\" height=\"664\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image2-3.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image2-3.png 1240w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image2-3-300x161.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image2-3-1024x548.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image2-3-768x411.png 768w\" sizes=\"(max-width: 1240px) 100vw, 1240px\">\n\n<figcaption><\/figcaption><\/figure>\nDie Idee ist, alle Kommentare und Bewertungen von Lernenden, die auf trustpilot verf\u00fcgbar sind, in einer einzigen CSV-Datei zusammenzufassen. Wir werden uns der Einfachheit halber auf die Bewertungen beschr\u00e4nken, die auf Deutsch abgegeben wurden.\n\nDie empfohlene Methodik f\u00fcr das Web Scraping mit Scrapy :\n<ul>\n \t<li>Analysiere und lokalisiere auf der Internetseite die verschiedenen Informationen, die du extrahieren willst.<\/li>\n \t<li>Prototype in der Scrapy Shell die verschiedenen Befehle, um jedes der zu extrahierenden Elemente, die im vorherigen Schritt identifiziert wurden, zu extrahieren.<\/li>\n \t<li>Erstelle ein <strong>Scrapy-Projekt<\/strong> und erstelle den Spider (um festzulegen, wie die Informationen von allen Seiten extrahiert werden sollen).<\/li>\n \t<li>Den Spider auf einer Seite testen\nDen Spider auf alle Seiten anwenden, um alle Informationen abzurufen.<\/li>\n<\/ul>\n<h4>Step 1: Analyse und Lokalisierung der zu extrahierenden Informationen<\/h4>\nDas Ziel dieses recht manuellen Schrittes ist es einfach, n\u00fctzliche Informationen zu finden und die dazugeh\u00f6rigen <strong>HTML-Tags<\/strong> zu identifizieren. Wenn wir uns auf einen Beitrag konzentrieren (unten) :\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"930\" height=\"379\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image12.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image12.png 930w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image12-300x122.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image12-768x313.png 768w\" sizes=\"(max-width: 930px) 100vw, 930px\">\n\n<figcaption><\/figcaption><\/figure>\nWir werden uns mit den unten stehenden Informationen besch\u00e4ftigen:\n<ul>\n \t<li>Der Kommentar<\/li>\n \t<li>Das Datum des Kommentars<\/li>\n \t<li>Das Datum der Ausbildung<\/li>\n \t<li>Der Titel des Kommentars<\/li>\n \t<li>Die Anmerkung<\/li>\n<\/ul>\nUm auf den <strong>HTML-Code der Seite zuzugreifen, klickst du (im Edge- oder Firefox-Browser)<\/strong> einfach mit der rechten Maustaste auf die Seite und klickst auf die Option inspizieren. Auf der rechten Seite werden die verschiedenen Tags angezeigt, die den verschiedenen Elementen der Seite zugeordnet sind.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1999\" height=\"750\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image6-2.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image6-2.png 1999w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image6-2-300x113.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image6-2-1024x384.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image6-2-768x288.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image6-2-1536x576.png 1536w\" sizes=\"(max-width: 1999px) 100vw, 1999px\">\n\n<figcaption><\/figcaption><\/figure>\nUm direkt auf den Tag zuzugreifen, der mit einem bestimmten Element verkn\u00fcpft ist, w\u00e4hle einfach das Element aus und wiederhole die vorherige Manipulation (Rechtsklick + inspizieren).\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1999\" height=\"1333\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image8.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image8.png 1999w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image8-300x200.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image8-1024x683.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image8-768x512.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image8-1536x1024.png 1536w\" sizes=\"(max-width: 1999px) 100vw, 1999px\">\n\n<figcaption><\/figcaption><\/figure>\nUm z. B. das Tag f\u00fcr den Titel zu erhalten, kannst du nach der Manipulation das Haupt-Tag f\u00fcr den Titel des nebenstehenden Kommentars lesen: .typography_heading-s__f7029. Dies ist ein CSS-Tag (man spricht auch von einem CSS-Selektor), aus dem nur der Text extrahiert werden kann.\n\nDieser Vorgang wird f\u00fcr alle Elemente, die du extrahieren willst, wiederholt, um jedem Element das entsprechende CSS-Tag zuzuordnen.\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\">Scrapy Weiterbildung<\/a><\/div><\/div>\n\n<h4>Schritt 2: Experimentieren mit der Scrapy Shell<\/h4>\nSobald die Tags eindeutig identifiziert sind, k\u00f6nnen wir die Scrapy-Eingabeaufforderung betreten, um die Befehle zum Extrahieren vollst\u00e4ndig zu definieren.\n\nUm die Scrapy Shell zu betreten, geben wir den folgenden Befehl ein (nachdem wir die virtuelle Umgebung aktiviert haben):\n\n# \u00d6ffnet die Scrapy Shell auf der trustpilot-Website.\nscrapy shell &#8222;https:\/\/fr.trustpilot.com\/review\/liora.io&#8220;.\n\nDer obige Befehl erm\u00f6glicht Folgendes:\n<ul>\n \t<li>Alle Elemente der angegebenen Seite mithilfe der Scrapy-API abrufen.<\/li>\n \t<li>Diese Elemente werden in einer Variablen &#8222;response&#8220; gespeichert.<\/li>\n \t<li>Scrapy Shell \u00f6ffnen<\/li>\n<\/ul>\nIn der Variablen &#8222;response&#8220; k\u00f6nnen wir mithilfe der <strong>CSS-Selektoren<\/strong>, die wir im vorherigen Schritt identifiziert haben, die Informationen, nach denen wir suchen, genau abrufen.\n\nUm die Informationen auf einfache und iterative Weise zu extrahieren (und sicherzustellen, dass die Informationen, die mit jedem Kommentar verbunden sind, einfach abgerufen werden), ist das erste Element, das wir extrahieren werden, die Liste aller Informationsblock-Selektoren auf einer Seite.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"601\" height=\"415\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image5-1.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image5-1.png 601w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image5-1-300x207.png 300w\" sizes=\"(max-width: 601px) 100vw, 601px\">\n\n<figcaption><\/figcaption><\/figure>\nDer CSS-Selektor, der einem Block zugeordnet ist, lautet wie folgt: .styles_reviewContentwrapper__zH_9M&#8216;.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1999\" height=\"1333\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image4-3.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image4-3.png 1999w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image4-3-300x200.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image4-3-1024x683.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image4-3-768x512.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image4-3-1536x1024.png 1536w\" sizes=\"(max-width: 1999px) 100vw, 1999px\">\n\n<figcaption><\/figcaption><\/figure>\nWir k\u00f6nnen dann den folgenden Befehl in der Scrapy-Shell ausf\u00fchren, um die Liste aller Bl\u00f6cke zu extrahieren.\n\n# Extrahiere alle Bl\u00f6cke.\nresponse.css(&#8218;.styles_reviewContentwrapper__zH_9M&#8216;))\n\nAls Ausgabe erh\u00e4lt man das folgende Ergebnis:\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1728\" height=\"651\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image11.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image11.png 1728w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image11-300x113.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image11-1024x386.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image11-768x289.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image11-1536x579.png 1536w\" sizes=\"(max-width: 1728px) 100vw, 1728px\">\n\n<figcaption><\/figcaption><\/figure>\nDies ist eine Liste von Selektoren, die es erm\u00f6glichen, die in jedem Block enthaltenen Daten mithilfe jedes einzelnen Elements der Liste abzurufen. Wir k\u00f6nnen dann alles, was wir brauchen, mit den folgenden Codezeilen abrufen (jede Zeile muss separat in der Scrapy-Shell ausgef\u00fchrt werden):\n\n# Abruf aller Informationsgruppen\nselectors = response.css(&#8218;.styles_reviewContentwrapper__zH_9M&#8216;)\n\n# die Bewertung eines Elements abrufen\nselectors[0].css(&#8218;img::attr(alt)&#8216;).extract()\n\n# Extrahiere den Titel auf einem Element.\nselectors[0].css(&#8218;.typography_heading-s__f7029::text&#8216;).extract()\n\n# Kommentar und Datum auf einem Element\nelt = selectors[0].css(&#8218;.typography_color-black__5LYEn::text&#8216;).extract()\nexp_date = elt[-1].\ncomment = &#8220;.join([word for word in elt[:-1]])\n\n# Extrahiere das Datum des Kommentars (einen Tag versetzt zu dem, was angezeigt wird).\nselectors[0].css(&#8218;div.typography_body-m__xgxZ_.typography_appearance-subtle__8_H2l.styles_datesWrapper__RCEKH &gt; time::text&#8216;).extract()\n<h4>Schritt 3: Erstellen eines Scrapy-Projekts<\/h4>\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\">Scrapy in einer Fortbildung lernen<\/a><\/div><\/div>\n\n\nSobald das Prototyping der Scrapy-Codezeilen abgeschlossen ist, kann man leicht eine Spider-Klasse erstellen, die einfach nur alle oben genannten Codezeilen in einer einzigen Python-Datei zusammenfasst.\n\nScrapy bietet native Funktionen zum Initialisieren eines Scrapy-Projekts (und damit auch zum Initialisieren der Spider-Klassendateien). Um ein Scrapy-Projekt zu erstellen, f\u00fchre einfach den folgenden Befehl in der Shell aus:\n\n# Erstelle ein Projekt (Beispiel Projekt trustdst).\nscrapy startproject trustdst\n\nNach der Ausf\u00fchrung siehst du dann :\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1473\" height=\"232\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image7-1.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image7-1.png 1473w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image7-1-300x47.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image7-1-1024x161.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image7-1-768x121.png 768w\" sizes=\"(max-width: 1473px) 100vw, 1473px\">\n\n<figcaption><\/figcaption><\/figure>\nDer soeben ausgef\u00fchrte Befehl hat einen Ordner mit initialisierten Python-Dateien erstellt. Wir k\u00f6nnen dann die folgende Architektur sehen :\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"370\" height=\"373\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image10.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image10.png 370w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image10-298x300.png 298w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image10-150x150.png 150w\" sizes=\"(max-width: 370px) 100vw, 370px\">\n\n<figcaption><\/figcaption><\/figure>\n<h4>Schritt 4: Erstellen des Spiders<\/h4>\nWir werden uns auf die im vorherigen Schritt erstellte Architektur st\u00fctzen, um die <a href=\"https:\/\/liora.io\/de\/spacy-open-source-blibliothek\">Python-Klassendatei<\/a> zu erstellen, mit der wir alle Informationen einer Seite auf einmal extrahieren k\u00f6nnen. Auch hier wird Scrapy uns erlauben, die Datei mit dem folgenden Befehl zu initialisieren:\n\n# Erstelle die Klasse Scraping Spider.\nscrapy genspider trustpilotspider de.trustpilot.com\/review\/liora.io\n\nMit diesem Befehl wird die Datei trustpilotspider.py erstellt, die wir bearbeiten und f\u00fcr das Scraping von Daten verwenden werden.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"780\" height=\"604\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image1-2.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image1-2.png 780w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image1-2-300x232.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image1-2-768x595.png 768w\" sizes=\"(max-width: 780px) 100vw, 780px\">\n\n<figcaption><\/figcaption><\/figure>\nDu kannst die Datei dann wie folgt bearbeiten:\n\n# import von scrapy\nimport scrapy\n\n# Definition des Sipders\nclass TrustpilotspiderSpider(scrapy.Spider):\n&#8222;&#8220;&#8220;\nname: Ein Klassenattribut, das dem Spider einen Namen gibt.\nWir werden dies verwenden, wenn wir unseren Spider sp\u00e4ter scrapy crawl laufen lassen.\n&lt;spider_name&gt;.\n\nallowed_domains: ein Klassenattribut, das Scrapy mitteilt, dass es\nnur Seiten der Dom\u00e4ne chocolate.co.uk crawlen soll.\nDies verhindert, dass der Spider weitergeht.\n\nstar_urls: ein Klassenattribut, das Scrapy die erste Url\ner scrape sollte. Wir werden dies in K\u00fcrze \u00e4ndern.\n\nparse: Die Parse-Funktion wird aufgerufen, nachdem eine Antwort von\nvon der Zielwebsite abgerufen wird.\n&#8222;&#8220;&#8220;\nname = &#8222;trustpilotspider&#8220;.\nallowed_domains = [&#8222;de.trustpilot.com&#8220;].\nstart_urls = [&#8222;https:\/\/fr.trustpilot.com\/review\/liora.io&#8220;] # Umbruch der URL.\n\ndef parse(self, response):\n&#8222;&#8220;&#8220;\nModul zum Abrufen von Informationen\n&#8222;&#8220;&#8220;\n\n# Schleife \u00fcber alle Informationsbl\u00f6cke.\nselectors = response.css(&#8218;.styles_reviewContentwrapper__zH_9M&#8216;)\n\n# Iterative Extraktion der Informationen\nfor selector in selectors:\n# Die Informationen, die zur\u00fcckgegeben werden sollen\nyield{\n&#8217;notes&#8216;: selector.css(&#8218;img::attr(alt)&#8216;).extract(),\n&#8218;titel&#8216;: selector.css(&#8218;.typography_heading-s__f7029::text&#8216;).get(), # .extract()[0].\n&#8218;exp_date&#8216;: selector.css(&#8218;.typography_color-black__5LYEn::text&#8216;).extract()[-1],\n&#8218;comments&#8216;: &#8220;.join([text for text in selector.css(&#8218;.typography_color-black__5LYEn::text&#8216;).extract()[:-1]]),\n&#8218;comment_date&#8216;: selector.css(&#8218;div.typography_body-m__xgxZ_.typography_appearance-subtle__8_H2l.styles_datesWrapper__RCEKH &gt; time::text&#8216;).get()\n}\n\nUm die Datei auszuf\u00fchren, f\u00fchre einfach den folgenden Befehl aus:\n\nscrapy crawl trustpilotspider ou scrapy crawl trustpilotspider -O myonepagescrapeddata.json\n\n(wenn man das Ergebnis in einer JSON-Datei speichern m\u00f6chte)\n<h3>Fazit<\/h3>\nDaten geh\u00f6ren zu den wertvollsten Verm\u00f6genswerten, die ein Unternehmen besitzen kann. Sie sind das Herzst\u00fcck von Data Science und Datenanalyse. Unternehmen, die aktiv Daten sammeln, k\u00f6nnen einen Wettbewerbsvorteil gegen\u00fcber Unternehmen entwickeln, die dies nicht tun. Mit ausreichenden Daten k\u00f6nnen Organisationen die Ursachen von Problemen besser bestimmen und fundierte Entscheidungen treffen.\n\nEs gibt Szenarien, in denen eine Organisation m\u00f6glicherweise nicht \u00fcber gen\u00fcgend Daten verf\u00fcgt, um daraus die notwendigen Lehren zu ziehen. Dies ist z. B. bei einigen Start-up-Unternehmen der Fall, die fast immer ohne Daten beginnen. Eine L\u00f6sung f\u00fcr solche F\u00e4lle ist der Einsatz einer Datenerfassungstechnik wie Web Scraping.\n\nScrapy ist ein Open-Source-Framework mit einer gro\u00dfen Community, mit dem man effizient Daten aus dem Web extrahieren kann. Es eignet sich daher vollst\u00e4ndig f\u00fcr gro\u00dfe <strong>Web-Scraping-Projekte<\/strong>, da es eine klare Struktur und Instrumente zur Verarbeitung der abgerufenen Informationen bereitstellt.\n\nDieser Artikel sollte lediglich Scrapy mit einigen seiner grundlegenden Funktionen vorstellen, die von Data Engineers, Data Scientists oder Data Analysts zum Extrahieren von Informationen verwendet werden.\n\nSi vous souhaitez aller plus loin avec Scrapy n\u2019h\u00e9sitez pas \u00e0 consulter la documentation officielle : <a href=\"https:\/\/docs.scrapy.org\/en\/latest\/intro\/tutorial.html\">Scrapy Tutorial \u2014 Scrapy 2.8.0 documentation<\/a>. Pour en apprendre davantage sur les technologies et les m\u00e9thodologies d\u2019acquisition de l&#8217;information, <strong>n&#8217;h\u00e9sitez pas \u00e0 consulter les formations de Liora<\/strong>.\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\">Data Weiterbildungen<\/a><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Beim Surfen im Internet ist es auf vielen Seiten nicht m\u00f6glich, Daten direkt f\u00fcr den pers\u00f6nlichen Gebrauch zu speichern. Die einfachste L\u00f6sung in diesem Fall ist einfach das manuelle Kopieren und Einf\u00fcgen der Daten, was schnell m\u00fchsam und zeitaufwendig werden kann. Aus diesem Grund werden h\u00e4ufig Web Scraping-Techniken eingesetzt, um Daten von Webseiten zu extrahieren. [&hellip;]<\/p>\n","protected":false},"author":76,"featured_media":176867,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2476],"class_list":["post-176865","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-dev"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/176865","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/76"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=176865"}],"version-history":[{"count":1,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/176865\/revisions"}],"predecessor-version":[{"id":217515,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/176865\/revisions\/217515"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/176867"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=176865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=176865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}