{"id":175651,"date":"2026-02-18T22:23:13","date_gmt":"2026-02-18T21:23:13","guid":{"rendered":"https:\/\/liora.io\/de\/?p=175651"},"modified":"2026-02-18T22:23:14","modified_gmt":"2026-02-18T21:23:14","slug":"selenium-python-case-study-zum-euronews-web-scraping","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/selenium-python-case-study-zum-euronews-web-scraping","title":{"rendered":"Selenium Python: Case Study zum Euronews Web Scraping"},"content":{"rendered":"<h2>Selenium Python: Was ist Web Scraping ?<\/h2>\nAls Data Scientist, Data Engineer oder Data Analyst musst du mit Datens\u00e4tzen umgehen, die in eine Anwendung, einen Machine-Learning-Algorithmus oder eine Datenanalyse einflie\u00dfen.\n\nIn manchen F\u00e4llen kannst du bereits erstellte Datens\u00e4tze verwenden, aber manchmal musst du den Datensatz auch selbst zusammenstellen oder einen Datensatz vervollst\u00e4ndigen, indem du Informationen aus dem Internet abrufst.\n\nInformationen manuell zu sammeln, z. B. durch Kopieren und Einf\u00fcgen des Inhalts, der dich interessiert, auf jeder Seite, ist undenkbar, wenn die Menge der zu sammelnden Informationen gro\u00df ist. Gl\u00fccklicherweise ist es m\u00f6glich, das Sammeln von Inhalten im Internet mithilfe von Web Scraping zu automatisieren.\n\nWeb Scraping bezeichnet das automatische Abrufen von Daten und Inhalten aus dem Internet. Python verf\u00fcgt \u00fcber mehrere Bibliotheken, die das Web Scraping erm\u00f6glichen.\n\nUnter diesen ist die Beautiful Soup Library wahrscheinlich die bekannteste und hat den Vorteil, dass sie einfach zu bedienen ist. Sie ist jedoch nicht in der Lage, Informationen abzurufen, die dynamisch \u00fcber JavaScript in eine Webseite eingef\u00fcgt werden. Heute werden wir uns mit dem Selenium-Framework besch\u00e4ftigen, das unter anderem den Vorteil hat, dies zu erm\u00f6glichen.\n<h2>Warum Selenium f\u00fcr Web Scraping verwenden?<\/h2>\nSelenium ist ein Open-Source-<a href=\"https:\/\/liora.io\/de\/was-ist-ein-framework\">Framework<\/a>, das urspr\u00fcnglich entwickelt wurde, um automatisierte Tests in verschiedenen Browsern (Chrome, Internet Explorer, Firefox, Safari,&#8230;) durchzuf\u00fchren. Diese Bibliothek wird auch zum Web-Scraping verwendet, da sie es erm\u00f6glicht, zwischen Internetseiten zu navigieren und mit den Elementen der Seite wie ein echter Benutzer zu interagieren.\n\nAuf diese Weise wird es m\u00f6glich, dynamische Webseiten zu scrapen, d. h. Webseiten, die dem Benutzer je nach seinen Aktionen ein bestimmtes Ergebnis zur\u00fcckgeben.\n\nIm weiteren Verlauf dieses Artikels werden wir sehen, wie wir mit Selenium Nachrichtenartikel von der <a href=\"\/\">Euronews-Website<\/a> abrufen und einen Dataframe erstellen k\u00f6nnen, der f\u00fcr ein Textmining-Projekt bereit ist.\n<h2>Praxisbeispiel: Web Scraping von Zeitungsartikeln, die von Euronews abgerufen wurden<\/h2>\nUm unser Web-Scraping-Skript und unsere Analyse zu implementieren, werden wir <strong>Jupyter Notebook<\/strong> verwenden. Zuerst musst du die verschiedenen Bibliotheken, die du f\u00fcr die Verwendung von Selenium ben\u00f6tigst, mit Hilfe von pip install auf deiner<a href=\"https:\/\/liora.io\/de\/top-10-der-python-bibliotheken-fur-data-scientists\"> Python-Umgebung installieren.<\/a>\n\n&#8222;`\npip install selenium\npip install webdriver_manager\n&#8222;`\n\nDas Selenium-Modul bietet Zugang zu :\n\nAuf den Selenium webdriver, eine wichtige Komponente, die unseren Code, hier in der Programmiersprache Python, interpretiert und mit dem Browser interagiert. Im Rahmen dieses Tutorials werden wir einen Webtreiber verwenden, der den Chrome-Browser steuert.\nAuf die By-Methode, die es erm\u00f6glicht, mit dem DOM zu interagieren und Elemente auf der Webseite zu finden.\n\nDas Modul WebDriver Manager sorgt f\u00fcr die Verwaltung (Download, Konfiguration und Wartung) der von Selenium WebDriver ben\u00f6tigten Treiber.\n\nImportieren wir nun die ben\u00f6tigten Bibliotheken:\n\nEs ist soweit, wir k\u00f6nnen mit dem Thema beginnen. Wir werden die Euronews-Artikel des Vortags scrapen.\n\nHier ist eine Beschreibung der verschiedenen Schritte, die wir durchf\u00fchren werden:\n\nWir gehen auf die Archivseite der Artikel des Vortags.\nDie Links aller Artikel, die am Vortag des aktuellen Datums erschienen sind, abrufen und in einer Liste speichern.\nIteriere die in unserer Liste enthaltenen Links und erstelle eine weitere Liste, die f\u00fcr jeden Artikel ein W\u00f6rterbuch mit :\n<ul>\n \t<li>Titel des ArtikelsDas Datum, an dem er erschienen ist<\/li>\n \t<li>Die Autoren<\/li>\n \t<li>Die Abs\u00e4tze des Artikels<\/li>\n \t<li>Die Kategorie<\/li>\n \t<li>Der Link zu dem Artikel<\/li>\n \t<li>Eine schnelle visuelle Analyse unseres Textkorpus durchf\u00fchren<\/li>\n<\/ul>\n<h3>Schritt 1: Verwende Selenium, um auf die Artikel des Vortags zuzugreifen.<\/h3>\nZun\u00e4chst wollen wir uns mit der Struktur der Url des euronews-Archivs besch\u00e4ftigen. Um die Artikel eines bestimmten Tages abzurufen, hat die Url die Form: https:\/\/www.euronews.com\/{years}\/{month}\/{days}.\n\nWir stellen auch fest, dass es eine Paginierung mit 30 Artikeln pro Seite gibt und dass es bei mehr als 30 Artikeln m\u00f6glich ist, von einer Seite zur n\u00e4chsten zu wechseln, indem man einen Query-Param in die Url einf\u00fcgt: https:\/\/www.euronews.com\/{years}\/{month}\/{days}?p={page}.\n\nFoto zum Einf\u00fcgen :\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"703\" height=\"494\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image9.png\" alt=\"\" loading=\"lazy\"><figcaption><\/figcaption><\/figure>\nUm das Datum des Vortags abzurufen, verwenden wir die Bibliothek datetime und erstellen drei Variablen, die das Jahr, den Monat und den Tag enthalten.\n\nWir testen die Selenium-Bibliothek, indem wir einen Chrome Webdriver initialisieren. Der unten stehende Code erm\u00f6glicht es uns, mit Selenium automatisch alles auszuf\u00fchren, was wir manuell tun w\u00fcrden: den Browser \u00f6ffnen, die Euronews-Seite mit den Artikeln des Vortags aufrufen, auf die Schaltfl\u00e4che zum Akzeptieren von Cookies klicken und auf der Seite scrollen.\n\nDie Funktion scroll wurde in einer Zelle weiter oben im Notebook definiert:\n<h3>Schritt 2: Links aus den Artikeln abrufen<\/h3>\nWir stellen fest, dass die Anzahl der Artikel f\u00fcr einen bestimmten Tag auf der Webseite steht, damit wir wissen, von welcher Seite wir die Artikel abrufen m\u00fcssen:\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"697\" height=\"263\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image4-1.png\" alt=\"\" loading=\"lazy\">\n\n<figcaption><\/figcaption><\/figure>\nUnabh\u00e4ngig von den verwendeten Web-Scraping-Bibliotheken ist es notwendig, die Seite zu inspizieren, um die Elemente der Webseite zu identifizieren, die f\u00fcr uns von Interesse sind. Wir k\u00f6nnen dies \u00fcber CSS-Selektoren tun.\n\nUm eine Seite zu inspizieren, klicke mit der rechten Maustaste und dann auf &#8222;Inspizieren&#8220; oder verwende den Shortcut Strg + Cmd + C unter macOS oder Strg + Shift + C unter Windows und Linux.\n\nMit der BY-Klasse von Selenium (die wir anstelle der .find_elements_by-Methode verwenden werden) haben wir die Wahl zwischen verschiedenen Arten von Eigenschaften, um ein Element auf einer Webseite zu lokalisieren, unter anderem:\n<ul>\n \t<li>Die ID des Elements<\/li>\n \t<li>Der Name des Elements<\/li>\n \t<li>Der Name des Tags<\/li>\n \t<li>Seinen Xpath<\/li>\n \t<li>Seine Klasse<\/li>\n<\/ul>\nNach der Inspektion sehen wir, dass sich der Elementz\u00e4hler im ersten strong-Tag der Klasse &#8222;c-block-listing__results&#8220; befindet.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1007\" height=\"461\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image3-1.png\" alt=\"\" loading=\"lazy\">\n\n<figcaption><\/figcaption><\/figure>\nUm das Element abzurufen, werden wir seinen XPath verwenden. Der XPath ist ein XML-Pfad, der es erm\u00f6glicht, durch die HTML-Struktur einer Seite zu navigieren und jedes Element auf dieser Seite zu finden.\n\nBeim Webscraping ist es besonders n\u00fctzlich, den XPath-Pfad eines Elements zu verwenden, wenn die Klasse des Elements nicht ausreicht, um es zu identifizieren, z. B. wenn wir ein Sub-Tag eines Elements einer bestimmten Klasse abrufen m\u00f6chten.\n\nDer Xpath eines HTML-Elements ist wie folgt strukturiert:\n\n\/\/tag_name_of_major_element[@attribute=&#8220;Value&#8220;]\/tag_name_of_sub_element[index_of_the_sub_element]\n\nWo:\n\ntag_name_of_major_element entspricht dem Haupt-Tag (div, img, p, b usw.).\nattribute entspricht der Klasse oder id des Elements und value seinem Wert.\ntag_name_of_sub_element entspricht dem Tag des Unter-Tags.\nindex_of_the_sub_element beginnt bei 1 und entspricht der Nummer des Sub-Tags. Dieser Index ist nur relevant, wenn es mehrere Unterelemente gibt, die im Haupttag enthalten sind.\n\nDie Methode .text, erm\u00f6glicht uns den Zugriff auf den Wert des Textes des Elements, hier &#8222;57&#8220;.\n\nAnhand der Anzahl der abgerufenen Artikel und der Paginierung auf 30, die wir beobachtet haben, berechnen wir die Anzahl der Seiten, die wir scrapen m\u00fcssen, hier 2.\n\nWir werden nun die Links der verschiedenen Artikel abrufen. Beim Inspizieren f\u00e4llt uns auf, dass die Links der Artikel die Klasse object__title__link haben. Wir rufen alle Elemente ab, die diese Klasse haben, und erstellen eine Liste, die f\u00fcr jedes Element den Wert des<strong> Attributs href (das den Link enth\u00e4lt)<\/strong> enth\u00e4lt, den wir mit der Methode get attribute abgerufen haben.\n<h3>Schritt 3: Scraping des Inhalts jedes Artikels<\/h3>\nWir kommen nun zum entscheidenden Teil dieses Artikels: dem Scraping jedes einzelnen Artikels, der in der zuvor erstellten Artikelliste enthalten ist. Lass uns die Struktur der HTML-Seite inspizieren :\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1280\" height=\"596\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image18.png\" alt=\"\" loading=\"lazy\">\n\n<figcaption><\/figcaption><\/figure>\nEs f\u00e4llt auf, dass die uns interessierenden Kontextdaten wie Titel, Autor, Kategorie usw. immer an zweiter Stelle der Klassen stehen, die wir lokalisiert haben. An der ersten Position enth\u00e4lt das HTML n\u00e4mlich Informationen \u00fcber den vorherigen Artikel, die auf der Seite nicht angezeigt werden.\n\nMit dem folgenden Code k\u00f6nnen wir die Inhalte, die uns auf der Seite interessieren, abrufen:\n\nHier sind die verschiedenen Schritte des vorherigen Codes:\n<ul>\n \t<li>Man greift auf jeden Artikel zu.<\/li>\n \t<li>Man ruft den Text der Kontextdaten des Artikels ab (Titel, Autoren, Kategorie, Ver\u00f6ffentlichungsdatum).<\/li>\n \t<li>Man ruft die Abs\u00e4tze des Artikels ab.<\/li>\n \t<li>Man erstellt ein W\u00f6rterbuch mit den abgerufenen Daten.<\/li>\n \t<li>Man f\u00fcgt dieses W\u00f6rterbuch zu einer Liste mit dem Namen &#8222;list_of_articles&#8220; hinzu.\nIm Falle eines Fehlers speichert man den Link des Artikels in einer Liste &#8222;errors&#8220;.<\/li>\n<\/ul>\nNB: Es f\u00e4llt auf, dass es sich bei den meisten fehlerhaften Artikeln um Videoartikel handelt, die eine andere html-Struktur haben. Im Rahmen dieses Artikels beschlie\u00dfen wir, die wenigen Fehlerf\u00e4lle nicht zu behandeln.\n<h3>Schritt 4: Schnelle Visualisierung<\/h3>\nBevor wir zum Schluss kommen, werden wir eine kurze Visualisierung der gescrappten Artikel durchf\u00fchren. Dieser Schritt k\u00f6nnte zu den ersten Schritten eines <a href=\"https:\/\/liora.io\/de\/nlp-natural-language-processing-eine-einfuhrung\">Natural Processing Language (NLP)-Projekts<\/a> geh\u00f6ren.\n\nZun\u00e4chst importieren wir die f\u00fcr den weiteren Verlauf notwendigen Bibliotheken und erstellen dann einen Dataframe mithilfe der W\u00f6rterbuchliste list_of_articles.\n\nHier sind die ersten Zeilen des Dataframes :\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"708\" height=\"202\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image19.png\" alt=\"\" loading=\"lazy\">\n\n<figcaption><\/figcaption><\/figure>\nZun\u00e4chst besch\u00e4ftigen wir uns mit den verschiedenen Kategorien von Artikeln, indem wir mithilfe der <a href=\"https:\/\/liora.io\/de\/seaborn-alles-ueber-das-python-tool-zur-datenvisualisierung\">Seaborn-Bibliothek<\/a> die Anzahl der Artikel pro Kategorie anzeigen.\n\nBevor wir die <a href=\"https:\/\/liora.io\/de\/wordcloud-definition\">Wortwolke<\/a> anzeigen, entfernen wir die Stopwords mithilfe der Klasse stopwords aus dem Paket nltk.corpus.\n\nSchlie\u00dflich definieren wir eine Funktion, um eine Wortwolke mithilfe des Moduls wordcloud zu erstellen, das als Argument unsere Reihe mit den Artikeln nimmt.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"509\" height=\"447\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/05\/image7.png\" alt=\"\" loading=\"lazy\">\n\n<figcaption><\/figcaption><\/figure>\nHiermit sind wir am Ende dieses Tutorials angelangt, das dir gezeigt hat, wie<strong> Selenium dir beim Scraping von Daten<\/strong> im Internet helfen kann und dir die Gelegenheit gegeben hat, eine schnelle visuelle Analyse von Textdaten durchzuf\u00fchren.\n\nWenn du mehr \u00fcber die Hintergr\u00fcnde des Einsatzes von <a href=\"https:\/\/liora.io\/de\/web-scraping-theorie-und-anwendung-fuer-jedermann\"><strong>Web Scraping<\/strong><\/a> in den verschiedenen Datenberufen erfahren m\u00f6chtest, kannst du dir gerne unseren Artikel zu diesem Thema ansehen oder dich \u00fcber die Inhalte unserer verschiedenen Studieng\u00e4nge informieren.\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 Science Weiterbildungen<\/a><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Selenium Python: Was ist Web Scraping ? Als Data Scientist, Data Engineer oder Data Analyst musst du mit Datens\u00e4tzen umgehen, die in eine Anwendung, einen Machine-Learning-Algorithmus oder eine Datenanalyse einflie\u00dfen. In manchen F\u00e4llen kannst du bereits erstellte Datens\u00e4tze verwenden, aber manchmal musst du den Datensatz auch selbst zusammenstellen oder einen Datensatz vervollst\u00e4ndigen, indem du Informationen [&hellip;]<\/p>\n","protected":false},"author":76,"featured_media":218371,"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-175651","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\/175651","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=175651"}],"version-history":[{"count":2,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/175651\/revisions"}],"predecessor-version":[{"id":218372,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/175651\/revisions\/218372"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/218371"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=175651"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=175651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}