In diesem Tutorial erfahren Sie, was Web Scraping ist und wie Sie es mit PHP durchführen können. Wir extrahieren die 250 bestbewerteten IMDB-Filme mit PHP. Am Ende dieses Artikels verfügen Sie über fundierte Kenntnisse zur Durchführung von Web Scraping mit PHP und verstehen die Einschränkungen der Datenerfassung in großem Maßstab und wissen, welche Optionen Sie haben, wenn Sie solche Anforderungen haben.
Inhaltsverzeichnis
Was ist Web-Scraping?
Wir surfen jeden Tag im Internet auf der Suche nach Informationen, die wir für einen Auftrag oder einfach zur Bestätigung bestimmter Vermutungen benötigen. Manchmal müssen Sie möglicherweise einige dieser Daten oder Inhalte von einer Website kopieren und zur späteren Verwendung in einem Ordner speichern. Wenn Sie das getan haben, herzlichen Glückwunsch, Sie haben im Wesentlichen Web Scraping durchgeführt. Willkommen im Klub!
Wenn Sie jedoch große Datenmengen benötigen, erweist sich die typische Methode zum Kopieren und Einfügen als mühsam. Daten als Ware machen nur dann Sinn, wenn Sie sie in einem Kontext in großem Maßstab extrahieren.
Web Scraping oder Datenextraktion ist der Prozess, bei dem Daten aus mehreren Quellen im Web gesammelt und in einem lesbaren Format gespeichert werden.
Daten sind heutzutage so etwas wie eine Währung, und Unternehmen streben zunehmend danach, datengesteuert zu sein.
Aber ohne einen geeigneten Rahmen und Datenverwaltungsprotokolle, die den gesamten Datenlebenszyklus abdecken, ist die Währung des 21. Jahrhunderts so gut wie ein abgelaufener Coupon. Wir haben immer behauptet, dass schlechte Daten nicht besser sind als keine Daten. Lesen Sie hier mehr über die fünf Hauptmerkmale hochwertiger Daten:
Der Hauptzweck dieses Artikels besteht darin, Sie in die Welt der Datenextraktion mit PHP, einer der beliebtesten serverseitigen Skriptsprachen für Websites, einzuführen.
Wir werden ein einfaches PHP-Skript verwenden, um die 250 besten Filme der IMDB zu extrahieren und sie in einer lesbaren CSV-Datei zu präsentieren. Da PHP eine der am meisten gefürchteten Programmiersprachen ist, sollten Sie sich diese genauer ansehen. Der Schwierigkeitsgrad des Web-Scrapings mit PHP hängt nur von der Perspektive ab.
PHP-Grundlagen für Web Scraping
Die Technologie, die eine Verbindung zwischen Ihrem Webbrowser und den vielen Websites im Internet herstellt, ist komplex und kompliziert.
Ungefähr 40 % des Webs basieren auf PHP, das sowohl aus logischen als auch aus syntaktischen Gründen seit jeher als chaotisch gilt.
PHP ist eine objektorientierte Programmiersprache. Es unterstützt alle wichtigen Eigenschaften der objektorientierten Programmierung wie Abstraktion und Vererbung, was sich am besten für langfristige Scraping-Zwecke eignet.
Obwohl die Datenextraktion mit anderen Programmiersprachen relativ einfacher ist, verfügen die meisten Websites heutzutage über mehr als nur einen Hauch von PHP, sodass es praktisch ist, schneller einen Crawler zu schreiben und ihn in Websites zu integrieren.
Bevor wir fortfahren, skizzieren wir kurz den Inhalt dieses Artikels:
- Voraussetzungen
- Definitionen
- Aufstellen
- Erstellen des Schabers
- Erstellen der CSV
- Letzte Worte
Zuerst müssen wir definieren, was wir tun und was wir für dieses Scraping-Tutorial verwenden werden. Unser allgemeiner Arbeitsablauf besteht aus der Einrichtung eines Projektverzeichnisses und der Installation der für die Datenextraktion erforderlichen Tools.
Die meisten davon sind plattformunabhängig und können in jedem Betriebssystem Ihrer Wahl ausgeführt werden.
Anschließend werden wir jeden Schritt des Schreibens des Scrapers in PHP unter Verwendung der genannten Bibliotheken durchgehen und erklären, was jede Zeile bewirkt.
Abschließend gehen wir auf die Einschränkungen des Crawlings ein und erläutern, was bei groß angelegtem Crawling zu tun ist.
Der Artikel geht auf Fehler ein, die man unwissentlich machen könnte. Wir schlagen Ihnen auch eine passendere Lösung vor.
Definitionen für den Einstieg in PHP Web Scraping
Bevor wir mitten ins Geschehen einsteigen, wollen wir uns mit einigen grundlegenden Begriffen befassen, die Ihnen beim Lesen dieses Artikels begegnen werden. Zur Vereinfachung der Demonstration werden hier alle Fachbegriffe definiert.
1. Paketmanager
Ein Paketmanager hilft Ihnen bei der Installation wichtiger Pakete über einen zentralen Verteilungsspeicher. Es handelt sich im Grunde um ein Software-Repository, das ein Standardformat für die Verwaltung von Abhängigkeiten von PHP-Software und -Bibliotheken bereitstellt.
Obwohl sie nicht auf die Verwaltung von PHP-Bibliotheken beschränkt sind, können Paketmanager auch die gesamte auf unseren Computern installierte Software wie einen App Store verwalten, allerdings spezifischer auf den Code.
Einige Beispiele für Paketmanager sind: Composer (für PHP), npm (für JavaScript), apt (für Ubuntu-Derivat-Linux), Brew (für MacOS), Winget (für Windows) usw.
2. Entwicklerkonsole
Es ist ein Teil des Webbrowsers, der verschiedene Tools für Webentwickler enthält. Es ist auch einer der am häufigsten genutzten Bereiche des Browsers, wenn wir mit dem Scrapen von Daten von Websites beginnen wollen.
Mit der Konsole können Sie ermitteln, welche Aufgaben ein Webbrowser ausführt, wenn er mit einer beobachteten Website interagiert. Obwohl es viele Abschnitte zur Auswahl gibt, werden wir in diesem Artikel nur die Abschnitte „Elemente“, „Netzwerk“ und „Anwendungen“ verwenden.
3. HTML-Tags
Tags sind spezifische Anweisungen in Klartext, die in dreieckige Klammern (Größer-als-/Kleiner-als-Zeichen) eingeschlossen sind.
Beispiel:
<html> … </html>
Sie werden verwendet, um dem Webbrowser Anweisungen zu geben, wie eine Webseite benutzerfreundlich dargestellt werden soll.
4. Dokumentobjektmodell (DOM)
Das DOM besteht aus der logischen Struktur von Dokumenten und der Art und Weise, wie auf sie zugegriffen und sie bearbeitet werden.
Einfach ausgedrückt handelt es sich bei DOM um Modelle, die aus einer HTML-Antwort generiert werden und durch einfache Abfragen referenziert werden können, ohne dass eine komplexe Verarbeitung erforderlich ist.
Ein gutes Beispiel wäre ein interaktives Buch, in dem jedes komplexe Wort mit seiner Bedeutung verknüpft wird, sobald man auf das Wort klickt.
5. Guzzle/guzzlehttp
Es handelt sich um ein externes Paket, das von unserem Scraper verwendet wird, um Anfragen an und vom Webserver zu senden, ähnlich wie bei einem Webbrowser. Dieser Mechanismus wird oft als HTTP-Handshake bezeichnet, bei dem unser Code eine Anfrage (als GET-Anfrage bezeichnet) an die IMDB-Server sendet.
Als Antwort sendet uns der Server einen Antworttext, der aus einer Reihe von Anweisungen mit dem richtigen Antworttext, Cookies (manchmal) und anderen Befehlen besteht, die im Webbrowser ausgeführt werden.
Da unser Code in sequentieller Form (ein Prozess nach dem anderen) ausgeführt wird, verarbeiten wir keine anderen Anweisungen, die von den IMDB-Servern bereitgestellt werden. Wir konzentrieren uns nur auf den Antworttext. Die Dokumentation zu diesem Paket finden Sie hier.
6. Paquette/php-html-parser
Wie guzzle ist dies auch ein externes Paket, das verwendet wird, um die Rohantwort der vom Guzzle-Client empfangenen Webseite in ein richtiges DOM umzuwandeln.
Durch die Konvertierung in ein DOM können wir leicht auf die empfangenen Teile des Dokuments verweisen und auf einzelne Teile des Dokuments zugreifen, die wir durchsuchen möchten. Den Quellcode und die Dokumentation für dieses Paket finden Sie hier.
7. Basis-URL
Basis-URLs sind die URLs von Websites, die auf das Stammverzeichnis des Webservers verweisen.
Sie können die Basis-URL besser verstehen, indem Sie sich ansehen, wie eine Ordnerstruktur im Computersystem funktioniert.
Nehmen Sie einen Ordner mit dem Namen „Dokumente“ auf dem Computer. Das ist es, was der Webserver dem Internet zugänglich macht. Es kann von jedem Benutzer aufgerufen werden, der eine Antwort von der Webseite anfordert.
Wir können jeden neuen Ordner im Dokumentenordner öffnen. Die Navigation zum neuen Ordner ist lediglich eine Frage des Durchlaufens Documents/newfolder/path.
Ähnlich wie Webseiten auf der Grundlage einer Hierarchie verwaltet werden, sind die Basis-URLs das Stammverzeichnis des gesamten Webdokuments der Webseite, und alle neuen Seiten sind einfach „Ordner“ innerhalb dieses Basis-URL-Ordners.
Header sind Anweisungen für die Webserver und nicht für unser Clientsystem. Sie bieten eine einfache Sammlung vordefinierter Definitionen, die es Webservern ermöglichen, Client-Antworten genau zu dekodieren.
Ein einfaches Beispiel wäre eine Download-Windows-Seite, beispielsweise auf Microsoft.com.
Anhand des User-Agent-Headers kann der Webserver leicht ableiten, dass die an seinen Server gesendete Anfrage von einem Windows-PC stammt. Daher muss es Informationen senden, die für die Plattform relevant sind. Die gleiche Logik gilt für Sprachunterschiede zwischen Webseiten.
9. CSS-Selektoren
CSS-Selektoren sind einfach eine Sammlung von Textsyntax, die ein Dokument in einem DOM lokalisieren kann, ohne große Verarbeitungsressourcen zu verbrauchen.
Es ähnelt dem Inhaltsverzeichnisabschnitt in einem physischen Buch. Durch einen Blick auf das Inhaltsverzeichnis kann der Leser zu den Abschnitten gelangen, die ihn interessieren.
Aber im Gegensatz zum Inhaltsverzeichnis können CSS-Selektoren mehr Filter akzeptieren und diese nutzen, um Rauschen (unwichtige Daten) aus den tatsächlichen Daten zu reduzieren, die wir im DOM durchsuchen müssen.
Sie werden hauptsächlich beim Webdesign verwendet, sind aber beim Web-Scraping sehr hilfreich.
Ab diesem Punkt geht der Artikel davon aus, dass Sie über grundlegende Kenntnisse der objektorientierten Programmierung und PHP verfügen. Sie sollten die im obigen Abschnitt dargestellte Definition überflogen haben.
Es vermittelt Ihnen die Grundkenntnisse, die Sie benötigen, um mit dem Tutorial in den folgenden Abschnitten fortzufahren. Wir werden uns nun mit dem Aufbau des Crawlers befassen.
Komponist
Zunächst installieren wir einen Paketmanager (1) namens Composer über den Paketmanager für Ihre Systeme. Für Linux-Varianten ist es einfach Sudo apt Install Composer (Ubuntu) oder mit einem beliebigen Paketmanager auf unserem Computer. Weitere Informationen zu den Schritten zur Installation von Composer finden Sie hier.
Visual Studio Code (oder ein beliebiger Texteditor; sogar Notepad reicht aus)
Dies dient zum Schreiben des eigentlichen Schabers. Visual Studio Code verfügt über mehrere Erweiterungen, die Sie bei der Entwicklung von Programmen in verschiedenen Programmiersprachen unterstützen.
Es ist jedoch nicht die einzige Möglichkeit, diesem Tutorial zu folgen. Zum Schreiben eines Scrapers kann jeder Texteditor, auch ein einfacher, verwendet werden.
Wir empfehlen IDE aufgrund der automatischen Syntaxhervorhebung und anderer grundlegender Funktionen dringend. Es kann über die Stores einzelner Plattformen installiert werden.
Unter Linux ist die Installation über die Paketmanager oder Snap oder Flatpaks viel einfacher. Informationen zur Windows- und MacOS-Installation finden Sie hier.
Nachdem wir nun alles haben, was wir brauchen, um den Scraper zu schreiben, um die Details der 250 am besten bewerteten Filme in der IMDB zu extrahieren, können wir mit dem Schreiben des eigentlichen Drehbuchs fortfahren.
Erstellen des Web Scrapers
Über diesen Link möchten wir die bisher 250 am besten bewerteten Filme der IMDB für die folgenden Details durchsuchen:
- Rang
- Titel
- Direktor
- Führt
- URL
- Bild URL
- Bewertung
- Anzahl der Bewertungen
- Erscheinungsjahr
Aber es gibt einen kleinen Schluckauf. Auf der Website werden nicht alle von uns benötigten Informationen angezeigt.
Nur Rang, Titel, Jahr, Bewertung und Bild sind direkt sichtbar.
Der erste Schritt beim Web Scraping besteht darin, herauszufinden, was die Website vor uns verbirgt.
Sie könnten Websites als vom Webserver gesendete Textwände betrachten. Beim Lesen durch den Webbrowser kann die Website abhängig von den Anweisungen auf den vom Webserver gesendeten Textwänden unterschiedliche Strukturen anzeigen.
Jeder Hover in jedem Element der Website ist lediglich eine Anweisung an den Webbrowser, der vom Server empfangenen Textantwort zu folgen und entsprechend zu handeln.
Als Scraper besteht unsere Aufgabe darin, diesen empfangenen Text zu manipulieren und alle Informationen zu extrahieren, die die Website vor uns verbergen möchte, es sei denn, wir klicken auf die gewünschte Option.
Schritt 1:
Öffnen Sie die Entwicklertools (2) im Browser, um zu überprüfen, was die Website vor uns verborgen hat. Um die Entwicklerkonsole zu öffnen, drücken Sie F12 auf der Tastatur oder Ctrl+Shift+I (Command+Shift+I for Mac)
. Sobald Sie die Entwicklerkonsole öffnen, werden Sie mit dem folgenden Bildschirm begrüßt.
Dies ist im Grunde das, was die aktuelle Website an unser System gesendet hat, um die Website auf der Leinwand des Webbrowsers anzuzeigen.
Schritt 2:
Klicken Sie nun auf die Schaltfläche „Inspizieren“ (Pfeiltaste oben links), um den Inspektionsmodus für die Website zu starten.
Bei diesem Modus handelt es sich um einen Entwicklermodus, der zur Interaktion mit der Webseite verwendet wird, als ob wir versuchen würden, das interaktive Element auf der Website auf seine tatsächliche Anweisungsquelle in den Textwänden (Antwort genannt) zurückzuführen, die vom Webserver der IMDB gesendet werden .
Jetzt klicken wir einfach auf einen der Filmnamen und in der Konsole können wir sehen, wie die tatsächliche Textantwort lautete.