suchen
HeimBackend-EntwicklungPHP-TutorialBildkratzer mit dem Domcrawler von Symfony;

Bildkratzer mit dem Domcrawler von Symfony;

Ein meiner Fotografenfreund von mir hat mich gebeten, Bilder von Bildrahmen aus dem Internet zu finden und herunterzuladen. Ich landete schließlich auf einer Webseite, auf der eine Reihe von ihnen kostenlos zur Verfügung stand, aber es gab ein Problem: Ein Link zum Herunterladen aller Bilder war nicht vorhanden.

Ich wollte nicht den Stress durchgehen, die Bilder einzeln herunterzuladen. Deshalb habe ich diese PHP -Klasse geschrieben, um alle auf der Website gefundenen Bilder zu finden, herunterzuladen und zu reißeln.

Key Takeaways

  • Die PHP -Klasse verwendet die Domcrawler -Komponente von Symfony, um Bilder von einer Webseite zu kratzen, herunterzuladen und in einen Ordner zu speichern, ein ZIP -Archiv des Ordners zu erstellen und dann den Ordner zu löschen. Diese Klasse wurde entwickelt, um das Herunterladen mehrerer Bilder von einer Website zu automatisieren.
  • Die Klasse enthält fünf private Eigenschaften und acht öffentliche Methoden. Die Eigenschaften speichern Informationen wie Ordnername, Webseiten -URL, HTML -Dokumentcode, ZIP -Dateiname und Betriebsstatus. Die Methoden enthalten Funktionen zum Festlegen des Ordners und des Dateinamens, zum Sofortieren des Domcrawlers, zum Herunterladen und Speichern von Bildern, erstellen Sie eine ZIP -Datei, löschen Sie den Ordner und erhalten Sie den Betriebsstatus.
  • Um die Klasse zu verwenden, müssen alle erforderlichen Dateien entweder über Autoload oder explizit enthalten sein. Die Setfolder- und SetFileName -Methoden sollten mit ihren jeweiligen Argumenten aufgerufen werden, und die Prozessmethode wird dann aufgerufen, um die Klasse in die Arbeit zu bringen. Die Domcrawler -Komponente und die Funktion create_zip müssen für die Funktion der Klasse enthalten sein.

Wie die Klasse funktioniert

Es sucht eine URL nach Bildern, Downloads und speichert die Bilder in einen Ordner, erstellt ein ZIP -Archiv des Ordners und löscht schließlich den Ordner.

Die Klasse verwendet die Domcrawler -Komponente von Symfony, um nach allen auf der Webseite gefundenen Bildlinks und einer benutzerdefinierten ZIP -Funktion zu suchen, die die ZIP -Datei erstellt. Kredit an David Walsh für die Postleitzahl.

codieren die Klasse

Die Klasse besteht aus fünf privaten Eigenschaften und acht öffentlichen Methoden, einschließlich der __construct Magic -Methode.

Bildkratzer mit dem Domcrawler von Symfony;

unten finden Sie die Liste der Klasseneigenschaften und ihrer Rollen.
1. Ordner $: Speichert den Namen des Ordners, der die abgekratzten Bilder enthält.
2. $ URL: Speichert die Webseite URL.
3..
4. $ Dateiname: Speichert den Namen der ZIP -Datei.
5. $ Status: Speichert den Status des Betriebs. D.h., wenn es ein Erfolg oder Misserfolg war.

Beginnen wir mit dem Aufbau der Klasse.

Erstellen Sie die Klassenzipimagen, die die oben genannten fünf Eigenschaften enthalten.

<span><span><?php </span></span><span><span>class ZipImages {
</span></span><span>    <span>private $folder;
</span></span><span>    <span>private $url;
</span></span><span>    <span>private $html;
</span></span><span>    <span>private $fileName;
</span></span><span>    <span>private $status;</span></span></span>

Erstellen Sie eine __construct magische Methode, die eine URL als Argument akzeptiert.
Die Methode ist ziemlich selbsterklärend.

<span>public function __construct($url) {
</span>    <span>$this->url = $url; 
</span>    <span>$this->html = file_get_contents($this->url);
</span>    <span>$this->setFolder();
</span><span>}</span>

Das erstellte ZIP -Archiv verfügt über einen Ordner, der die abgekratzten Bilder enthält. Die nachstehende SetFolder -Methode konfiguriert dies.

standardmäßig wird der Ordnername auf Bilder gesetzt, aber die Methode bietet eine Option, um den Namen des Ordners zu ändern, indem einfach der Ordnername als Argument übergeben wird.

<span><span><?php </span></span><span><span>class ZipImages {
</span></span><span>    <span>private $folder;
</span></span><span>    <span>private $url;
</span></span><span>    <span>private $html;
</span></span><span>    <span>private $fileName;
</span></span><span>    <span>private $status;</span></span></span>

setFileName bietet eine Option, um den Namen der ZIP -Datei mit einem Standardnamen auf Zipimages zu ändern:

<span>public function __construct($url) {
</span>    <span>$this->url = $url; 
</span>    <span>$this->html = file_get_contents($this->url);
</span>    <span>$this->setFolder();
</span><span>}</span>

Zu diesem Zeitpunkt instanziieren wir die Symfony -Crawler -Komponente, um nach Bildern zu suchen, und laden Sie alle Bilder in den Ordner herunter und speichern Sie sie.

<span>public function setFolder($folder="image") {
</span>    <span>// if folder doesn't exist, attempt to create one and store the folder name in property $folder
</span>    <span>if(!file_exists($folder)) {
</span>        <span>mkdir($folder);
</span>    <span>}
</span>    <span>$this->folder = $folder;
</span><span>}</span>

Nachdem der Download abgeschlossen ist, komprimieren wir den Bildordner mit unserer Funktion Custom Create_zip in ein ZIP -Archiv.

<span>public function setFileName($name = "zipImages") {
</span>    <span>$this->fileName = $name;
</span><span>}</span>

Schließlich löschen wir den erstellten Ordner, nachdem die ZIP -Datei erstellt wurde.

<span>public function domCrawler() {
</span>    <span>//instantiate the symfony DomCrawler Component
</span>    <span>$crawler = new Crawler($this->html);
</span>    <span>// create an array of all scrapped image links
</span>    <span>$result = $crawler
</span>        <span>->filterXpath('//img')
</span>        <span>->extract(array('src'));
</span>
<span>// download and save the image to the folder 
</span>    <span>foreach ($result as $image) {
</span>        <span>$path = $this->folder."/".basename($image);
</span>        <span>$file = file_get_contents($image);
</span>        <span>$insert = file_put_contents($path, $file);
</span>        <span>if (!$insert) {
</span>            <span>throw new <span>\Exception</span>('Failed to write image');
</span>        <span>}
</span>    <span>}
</span><span>}</span>

Erhalten Sie den Status der Operation. D.h., wenn es erfolgreich war oder ein Fehler aufgetreten ist.

<span>public function createZip() {
</span>    <span>$folderFiles = scandir($this->folder);
</span>    <span>if (!$folderFiles) {
</span>        <span>throw new <span>\Exception</span>('Failed to scan folder');
</span>    <span>}
</span>    <span>$fileArray = array();
</span>    <span>foreach($folderFiles as $file){
</span>        <span>if (($file != ".") && ($file != "..")) {
</span>            <span>$fileArray[] = $this->folder."/".$file;
</span>        <span>}
</span>    <span>}
</span>
    <span>if (create_zip($fileArray, $this->fileName.'.zip')) {
</span>        <span>$this->status = <span><span>
</span></span><span>File successfully archived. <a href="<span%20><span%20>%24this->fileName</span>.zip">Download it now</a>
</span></span><span><span>HTML<span>;</span></span>
</span>    <span>} else {
</span>        <span>$this->status = "An error occurred";
</span>    <span>}
</span><span>}</span>

alle oben genannten Methoden verarbeiten.

<span>public function deleteCreatedFolder() {
</span>    <span>$dp = opendir($this->folder) or die ('ERROR: Cannot open directory');
</span>    <span>while ($file = readdir($dp)) {
</span>        <span>if ($file != '.' && $file != '..') {
</span>            <span>if (is_file("<span><span>$this->folder</span>/<span>$file</span>"</span>)) {
</span>                <span>unlink("<span><span>$this->folder</span>/<span>$file</span>"</span>);
</span>            <span>}
</span>        <span>}
</span>    <span>}
</span>    <span>rmdir($this->folder) or die ('could not delete folder');
</span><span>}</span>

Sie können die vollständige Klasse von Github herunterladen.

Klassenabhängigkeit

Damit die Klasse funktioniert, müssen die Domcrawler -Komponente und die Funktion create_zip enthalten sein. Sie können den Code für diese Funktion hier herunterladen.

Laden und installieren Sie die Domcrawler -Komponente über den Komponisten einfach, indem Sie einfach die folgende Erforderungsanweisung zu Ihrer Composer.json -Datei hinzufügen:

<span>public function getStatus() {
</span>    <span>echo $this->status;
</span><span>}</span>

$ PHP Composer.phar installieren, um die Bibliothek herunterzuladen und die Datei Anbieter/autoload.php Autoloader zu generieren.

Verwenden der Klasse

  • Stellen Sie sicher, dass alle erforderlichen Dateien über autolad oder explizit enthalten sind.
  • rufen Sie die Methode Setfolder und SetFileName auf und geben Sie ihre jeweiligen Argumente ein. Rufen Sie nur die SetFolder -Methode auf, wenn Sie den Ordnernamen ändern müssen.
  • rufen Sie die Prozessmethode auf, um die Klasse für die Arbeit zu setzen.
<span>public function process() {
</span>    <span>$this->domCrawler();
</span>    <span>$this->createZip();
</span>    <span>$this->deleteCreatedFolder();
</span>    <span>$this->getStatus();
</span><span>}</span>

Bildkratzer mit dem Domcrawler von Symfony;

Zusammenfassung

In diesem Artikel haben wir gelernt, wie man einen einfachen PHP -Bildschaber erstellt, der automatisch heruntergeladene Bilder in ein ZIP -Archiv komprimiert. Wenn Sie alternative Lösungen oder Verbesserungsvorschläge haben, lassen Sie sie bitte in den Kommentaren unten, alle Feedback sind willkommen!

häufig gestellte Fragen (FAQs) zum Abkratzen von Symfonys Domcrawler

Was ist die Domcrawler -Komponente von Symfony? Es bietet eine API, die einfach zu bedienen und zu verstehen ist, was es zu einer beliebten Wahl für Web -Scraping -Aufgaben macht. Die Domcrawler -Komponente kann verwendet werden, um bestimmte Elemente auf einer Seite auszuwählen, Daten aus ihnen zu extrahieren und ihren Inhalt sogar zu ändern.

Wie installiere ich die Domcrawler -Komponente von Symfony? einfach. Sie können Composer verwenden, ein Abhängigkeitsmanagement -Tool für PHP. Führen Sie den folgenden Befehl in Ihrem Projektverzeichnis aus: Komponist benötigt Symfony/Dom-Crawler. Dadurch wird die Domcrawler -Komponente zusammen mit ihren Abhängigkeiten heruntergeladen und installiert.

Wie verwende ich die Domcrawler -Komponente von Symfony, um Bilder zu kratzen? Anschließend können Sie die Filtermethode verwenden, um die Bildelemente auszuwählen und ihre SRC -Attribute zu extrahieren. Hier ist ein grundlegendes Beispiel:

$ crawler = new crawler ($ html);
$ crawler-> filter ('img')-> jeweils (Funktion (crawler $ node) {
echo $ node-> attr ('src');
}); Laravel?

Ja, Sie können die Domcrawler -Komponente von Symfony mit Laravel verwenden. Die HTTP -Testfunktionalität von Laravel verwendet tatsächlich die Domcrawler -Komponente unter der Haube. Dies bedeutet Wählen Sie Elemente, einschließlich Filter, FilterxPath und auswählen. Mit diesen Methoden können Sie Elemente basierend auf ihrem Tag -Namen, XPath -Ausdruck oder Linktext auswählen. Ändern Sie den Inhalt der Elemente mithilfe der Domcrawler -Komponente von Symfony. Mit jeder Methode können Sie jedes ausgewählte Element iterieren und Operationen darauf ausführen. Zum Beispiel können Sie das SRC-Attribut eines Bildelements wie folgt ändern:

$ crawler-> filter ('img')-> jeweils (Funktion (Crawler $ node) {

$ node-> attr ('src', 'new-image.jpg');

}); Domcrawler-Komponente?

Wenn die Domcrawler-Komponente von Symfony verwendet wird, können Fehler und Ausnahmen mit Try-Catch-Blöcken behandelt werden. Wenn die Filtermethode beispielsweise keine übereinstimmenden Elemente findet, wird eine InvalidArgumentException ausgelöst. Sie können diese Ausnahme anpassen und angemessen umgehen. Dies erfordert jedoch zusätzliche Schritte, z. B. das Senden einer Postanforderung mit den Anmeldeinformationen und Speichern des Sitzungs -Cookies. Werte unter Verwendung der ATT -Methode der Domcrawler -Komponente von Symfony. Um das SRC-Attribut eines Bildelements beispielsweise zu extrahieren $ node-> attr ('src');

});

Kann ich die Domcrawler-Komponente von Symfony verwenden, um Ajax-beladene Inhalte zu kratzen? Sie können jedoch Tools wie Guzzle und Goutte in Kombination mit der Domcrawler-Komponente verwenden, um HTTP-Anforderungen zu senden und AJAX-beladene Inhalte zu verarbeiten.

Das obige ist der detaillierte Inhalt vonBildkratzer mit dem Domcrawler von Symfony;. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Arbeiten mit Flash -Sitzungsdaten in LaravelArbeiten mit Flash -Sitzungsdaten in LaravelMar 12, 2025 pm 05:08 PM

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIsCurl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIsMar 14, 2025 am 11:42 AM

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Vereinfachte HTTP -Reaktion verspottet in Laravel -TestsVereinfachte HTTP -Reaktion verspottet in Laravel -TestsMar 12, 2025 pm 05:09 PM

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

So registrieren und verwenden Sie Laravel -DienstleisterSo registrieren und verwenden Sie Laravel -DienstleisterMar 07, 2025 am 01:18 AM

Der Service -Container und die Dienstleister von Laravel sind für seine Architektur von grundlegender Bedeutung. In diesem Artikel werden Servicecontainer untersucht, Details für die Erstellung, Registrierung, Registrierung und die praktische Nutzung mit Beispielen mit Beispielen untersucht. Wir beginnen mit einem Ove

12 Beste PHP -Chat -Skripte auf Codecanyon12 Beste PHP -Chat -Skripte auf CodecanyonMar 13, 2025 pm 12:08 PM

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

PHP -Protokollierung: Best Practices für die PHP -ProtokollanalysePHP -Protokollierung: Best Practices für die PHP -ProtokollanalyseMar 10, 2025 pm 02:32 PM

Die PHP -Protokollierung ist für die Überwachung und Debugie von Webanwendungen von wesentlicher Bedeutung sowie für das Erfassen kritischer Ereignisse, Fehler und Laufzeitverhalten. Es bietet wertvolle Einblicke in die Systemleistung, hilft bei der Identifizierung von Problemen und unterstützt eine schnellere Fehlerbehebung

Erklären Sie das Konzept der späten statischen Bindung in PHP.Erklären Sie das Konzept der späten statischen Bindung in PHP.Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu.Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu.Mar 28, 2025 pm 05:12 PM

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool