Un de mes amis photographes m'a imploré de trouver et de télécharger des images de trames d'image sur Internet. J'ai finalement atterri sur une page Web qui avait un certain nombre d'entre elles disponibles gratuitement, mais il y avait un problème: un lien pour télécharger toutes les images ensemble n'était pas présent.
Je ne voulais pas passer par le stress du téléchargement des images individuellement, alors j'ai écrit cette classe PHP pour trouver, télécharger et zip toutes les images trouvées sur le site Web.
Les plats clés
- La classe PHP utilise le composant Domcrawler de Symfony pour gratter les images d'une page Web, les télécharger et les enregistrer dans un dossier, créer une archive zip du dossier, puis supprimer le dossier. Cette classe est con?ue pour automatiser le processus de téléchargement de plusieurs images à partir d'un site Web.
- La classe comprend cinq propriétés privées et huit méthodes publiques. Les propriétés stockent des informations telles que le nom du dossier, l'URL de la page Web, le code de document HTML, le nom du fichier zip et l'état de l'opération. Les méthodes incluent des fonctions pour définir le nom du dossier et du fichier, instancier le Domcrawler, télécharger et enregistrer des images, créer un fichier zip, supprimer le dossier et obtenir l'état de l'opération.
- Pour utiliser la classe, tous les fichiers requis doivent être inclus, via Autoload ou explicitement. Les méthodes SetFolder et SetFileName doivent être appelées avec leurs arguments respectifs, et la méthode de processus est ensuite appelée pour mettre la classe à fonctionner. Le composant Domcrawler et la fonction CREATE_ZIP doivent être inclus pour que la classe fonctionne.
comment fonctionne la classe
Il recherche une URL pour les images, télécharge et enregistre les images dans un dossier, crée une archive zip du dossier et supprime enfin le dossier.
La classe utilise le composant Domcrawler de Symfony pour rechercher tous les liens d'image trouvés sur la page Web et une fonction zip personnalisée qui crée le fichier zip. Crédit à David Walsh pour la fonction zip.
codage de la classe
La classe se compose de cinq propriétés privées et huit méthodes publiques, y compris la méthode magique __construct.
Vous trouverez ci-dessous la liste des propriétés de classe et leurs r?les.
1. $ Dossier: stocke le nom du dossier qui contient les images grattées.
2. $ URL: stocke l'URL de la page Web.
3. $ HTML: stocke le code de document HTML de la page Web à gratter.
4. $ nom de fichier: stocke le nom du fichier zip.
5. $ Status: économise l'état de l'opération. C'est-à-dire s'il s'agissait d'un succès ou d'un échec.
Commen?ons à construire la classe.
Créez les zipimages de classe contenant les cinq propriétés ci-dessus.
<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>
Créez une méthode magique __construct qui accepte une URL comme argument.
La méthode est assez explicite.
<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>
L'archive zip créée a un dossier qui contient les images grattées. La méthode setfolder ci-dessous configure ceci.
Par défaut, le nom du dossier est défini sur les images, mais la méthode fournit une option pour modifier le nom du dossier en passant simplement le nom du dossier comme argument.
<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>
SetFileName fournit une option pour modifier le nom du fichier zip avec un nom par défaut défini sur les zipimages:
<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>
à ce stade, nous instancions le composant Crawler Symfony pour rechercher des images, puis téléchargez et enregistrez toutes les images dans le dossier.
<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>
Une fois le téléchargement terminé, nous compressons le dossier d'image vers une archive zip à l'aide de notre fonction Create_zip personnalisée.
<span>public function setFileName($name = "zipImages") { </span> <span>$this->fileName = $name; </span><span>}</span>
Enfin, nous supprimons le dossier créé après la création du fichier zip.
<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>
Obtenez l'état de l'opération. C'est-à-dire s'il a réussi ou si une erreur s'est produite.
<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><<<HTML</span> </span></span><span>File successfully archived. <a href="<span><span>$this->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>
traiter toutes les méthodes ci-dessus.
<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>
Vous pouvez télécharger la classe complète de GitHub.
Dépendance des classes
Pour que la classe fonctionne, le composant Domcrawler et la fonction CREATE_ZIP doivent être inclus. Vous pouvez télécharger le code pour cette fonction ici.
Téléchargez et installez le composant Domcrawler via Composer simplement en ajoutant l'instruction exige suivante à votre fichier composer.json:
<span>public function getStatus() { </span> <span>echo $this->status; </span><span>}</span>
Exécutez $ php composer.phar Installez pour télécharger la bibliothèque et générer le fichier Autoloader Vendor / Autoload.php.
en utilisant la classe
- Assurez-vous que tous les fichiers requis sont inclus, via Autoload ou explicitement.
- Appelez le Setfolder et SetFileName et transmettez leurs arguments respectifs. Appelez uniquement la méthode setfolder lorsque vous devez modifier le nom du dossier.
- Appelez la méthode de processus pour mettre la classe au travail.
<span>public function process() { </span> <span>$this->domCrawler(); </span> <span>$this->createZip(); </span> <span>$this->deleteCreatedFolder(); </span> <span>$this->getStatus(); </span><span>}</span>
Résumé
Dans cet article, nous avons appris à créer un simple grattoir d'image PHP qui compresse automatiquement les images téléchargées dans une archive zip. Si vous avez d'autres solutions ou suggestions d'amélioration, veuillez les laisser dans les commentaires ci-dessous, tous les commentaires sont les bienvenus!
Questions fréquemment posées (FAQ) sur le grattage d'image avec Domcrawler de Symfony
Quel est le composant Domcrawler de Symfony?
Le composant Domcrawler de Symfony est un outil puissant qui permet aux développeurs de traverser et de manipuler les documents HTML et XML. Il fournit une API facile à utiliser et à comprendre, ce qui en fait un choix populaire pour les taches de grattage Web. Le composant Domcrawler peut être utilisé pour sélectionner des éléments spécifiques sur une page, en extraire des données et même modifier leur contenu.
Comment installer le composant Domcrawler de Symfony?
L'installation du composant Domcrawler de Symfony est direct. Vous pouvez utiliser Composer, un outil de gestion des dépendances pour PHP. Exécutez la commande suivante dans votre répertoire de projet: Composer Exiger Symfony / Dom-Crawler. Cela téléchargera et installera le composant Domcrawler avec ses dépendances.
Comment utiliser le composant Domcrawler de Symfony pour gratter les images?
Pour gratter les images en utilisant le composant Domcrawler de Symfony, vous devez d'abord créer une nouvelle instance de la classe Crawler et charger le contenu HTML. Ensuite, vous pouvez utiliser la méthode du filtre pour sélectionner les éléments d'image et extraire leurs attributs SRC. Voici un exemple de base:
$ CRAWLER = NOUVEAU CRAWLER ($ HTML);
$ CRAWLER-> Filter ('IMG') -> Chaque (fonction (Crawler $ node) {
echo $ Node-> attr ('src');
});
puis-je utiliser le composant Domcrawler de Symfony avec Laravel?
Oui, vous pouvez utiliser le composant Domcrawler de Symfony avec Laravel. La fonctionnalité de test HTTP de Laravel utilise en fait le composant Domcrawler sous le capot. Cela signifie que vous pouvez utiliser les mêmes méthodes et techniques pour traverser et manipuler le contenu HTML dans vos tests Laravel.
Comment sélectionner les éléments en utilisant le composant Domcrawler de Symfony?
Le composant Domcrawler de Symfony fournit plusieurs méthodes pour Sélectionnez des éléments, y compris Filtre, filterXpath et SelectLink. Ces méthodes vous permettent de sélectionner des éléments en fonction de leur nom de balise, de leur expression XPath ou du texte de liaison, respectivement.
Puis-je modifier le contenu des éléments en utilisant le composant Domcrawler de Symfony?
Oui, vous pouvez Modifiez le contenu des éléments à l'aide du composant Domcrawler de Symfony. La méthode vous permet d'itérer sur chaque élément sélectionné et d'effectuer des opérations dessus. Par exemple, vous pouvez modifier l'attribut SRC d'un élément d'image comme celui-ci:
$ CRAWLER-> Filter ('IMG') -> Chaque (fonction (Crawler $ node) {
$ node-> att ('src', 'new-image.jpg');
});
comment gérer les erreurs et les exceptions lorsque vous utilisez Symfony Composant Domcrawler?
Lors de l'utilisation du composant Domcrawler de Symfony, des erreurs et des exceptions peuvent être manipulées à l'aide de blocs d'essai. Par exemple, si la méthode du filtre ne trouve aucun élément correspondant, il lancera une invalidargumentException. Vous pouvez assister à cette exception et le gérer de manière appropriée.
Puis-je utiliser le composant Domcrawler de Symfony pour gratter les sites Web qui nécessitent une authentification?
Oui, vous pouvez utiliser le composant Domcrawler de Symfony pour gratter les sites Web qui nécessitent une authentification. Cependant, cela nécessite des étapes supplémentaires, comme l'envoi d'une demande de poste avec les informations d'identification de connexion et le stockage du cookie de session.
Comment extraire les valeurs d'attribut à l'aide du composant Domcrawler de Symfony?
Vous pouvez extraire des attributs Valeurs utilisant la méthode ASTR fournie par le composant Domcrawler de Symfony. Par exemple, pour extraire l'attribut SRC d'un élément d'image, vous pouvez effectuer les éléments suivants:
$ CRAWLER-> Filter ('IMG') -> Chaque (fonction (Crawler $ node) {
echo $ node-> attr ('src');
});
Puis-je utiliser le composant Domcrawler de Symfony pour gratter le contenu chargé Ajax?
Malheureusement, le composant Domcrawler de Symfony ne peut pas gratter directement le contenu chargé Ajax car il n'exécute pas JavaScript. Cependant, vous pouvez utiliser des outils comme Guzzle et Goutte en combinaison avec le composant Domcrawler pour envoyer des demandes HTTP et gérer le contenu chargé de l'Ajax.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

ToseCurelyHandleAuthentication andAuthorizationInPhp, suivitheSesteps: 1.AlwayShashPasswordSwithPassword_Hash () etverifyusingPassword_verify (), usePreparedStatementStopReventsQLendiject, andstoreSerDatain $ _SessionAfterLogin.2

Pour gérer en toute sécurité les téléchargements de fichiers dans PHP, le noyau consiste à vérifier les types de fichiers, à renommer les fichiers et à restreindre les autorisations. 1. Utilisez finfo_file () pour vérifier le type de mime réel, et seuls des types spécifiques tels que l'image / jpeg sont autorisés; 2. Utilisez Uniqid () pour générer des noms de fichiers aléatoires et les stocker dans le répertoire racine non Web; 3. Limiter la taille du fichier via les formulaires PHP.ini et HTML et définir les autorisations de répertoire sur 0755; 4. Utilisez Clamav pour scanner les logiciels malveillants pour améliorer la sécurité. Ces étapes empêchent efficacement les vulnérabilités de sécurité et garantissent que le processus de téléchargement de fichiers est s?r et fiable.

En PHP, la principale différence entre == et == est la rigueur de la vérification des types. == La conversion de type sera effectuée avant la comparaison, par exemple, 5 == "5" Renvoie True, et === Demande que la valeur et le type soient les mêmes avant que True sera renvoyé, par exemple, 5 === "5" Renvoie False. Dans les scénarios d'utilisation, === est plus sécurisé et doit être utilisé en premier, et == n'est utilisé que lorsque la conversion de type est requise.

Les méthodes d'utilisation des opérations mathématiques de base en PHP sont les suivantes: 1. Les signes d'addition prennent en charge les entiers et les nombres à virgule flottante, et peuvent également être utilisés pour les variables. Les numéros de cha?ne seront automatiquement convertis mais non recommandés en dépendances; 2. Les signes de soustraction utilisent - les signes, les variables sont les mêmes et la conversion de type est également applicable; 3. Les panneaux de multiplication utilisent * les panneaux, qui conviennent aux nombres et aux cha?nes similaires; 4. La division utilise / signes, qui doit éviter de diviser par zéro, et noter que le résultat peut être des nombres à virgule flottante; 5. Prendre les signes du module peut être utilisé pour juger des nombres impairs et uniformes, et lors du traitement des nombres négatifs, les signes restants sont cohérents avec le dividende. La clé pour utiliser correctement ces opérateurs est de s'assurer que les types de données sont clairs et que la situation limite est bien gérée.

Oui, PHP peut interagir avec les bases de données NoSQL comme MongoDB et Redis à travers des extensions ou des bibliothèques spécifiques. Tout d'abord, utilisez le pilote MongoDBPHP (installé via PECL ou Composer) pour créer des instances clients et faire fonctionner des bases de données et des collections, en prenant en charge l'insertion, la requête, l'agrégation et d'autres opérations; Deuxièmement, utilisez la bibliothèque Predis ou l'extension PHPREDIS pour vous connecter à Redis, effectuer des paramètres et des acquisitions de valeur clé, et recommander PHPredis pour des scénarios à haute performance, tandis que Predis est pratique pour un déploiement rapide; Les deux conviennent aux environnements de production et sont bien documentés.

TostayCurrentwithPhpDevelopments andBestPractices, suiventyewnewsources likephp.netandphpweekly, engagewithcommunitiesonforumums et conférences, keeptoolingupdated etgradualadoptnewfeatures, etreadorontruttetoopensourceprojects.

PhpBecamepopularforwebDevelopmentDuetoitSeaseOflearning, Samoussentegration withhtml, widespreadhostingsupport, andalargecosystemysteclustingframeworkslikeLaravelandcmsplateformeslikewordpress.itexcelSinlingFormSubMissions, ManagetingSeSeSessions, interactif, interactif

Tosetherighttimezoneinphp, usedate_default_timezone_set () Fonctionnellestartofyourscriptwithavalididentifiersuchas'america / new_york'.1.usedate_default_timezone_set () beforeanydate / timefunctions.20
