目录
钥匙要点
>它搜索图像,下载并将图像保存到文件夹中,创建文件夹的zip档案,最后删除文件夹。
>该类包括五个私人属性和八种公共方法,包括__ -Construct Magic方法。
>如何使用Symfony的Domcrawler组件来刮擦图像?
>
});
>不幸的是,我可以使用Symfony的Domcrawler组件来刮擦Ajax负载的内容吗?
首页 后端开发 php教程 与Symfony的图像刮擦

与Symfony的图像刮擦

Feb 21, 2025 am 08:47 AM

与Symfony的图像刮擦

>我的摄影师朋友恳请我从Internet查找和下载图像的图像。最终,我降落在一个免费的网页上,其中有很多免费,但存在一个问题:并不存在将所有图像一起下载的链接。

>我不想经历单独下载图像的压力,所以我写了此PHP课程以查找,下载和zip在网站上找到的所有图像。

>

钥匙要点

  • > PHP类利用Symfony的Domcrawler组件从网页上刮擦图像,下载并将其保存到文件夹中,创建文件夹的ZIP档案,然后删除文件夹。该课程旨在自动化从网站下载多个图像的过程。
  • >
  • 课程包括五个私人属性和八种公共方法。属性存储信息,例如文件夹名称,网页URL,HTML文档代码,ZIP文件名和操作状态。这些方法包括设置文件夹和文件名,实例化domcrawler,下载和保存图像,创建zip文件,删除文件夹并获取操作状态的函数。>
  • 要使用类,必须通过自动加载或明确包含所有必需的文件。 SetFolder和setFilename方法应使用其各自的参数调用,然后调用过程方法使该类工作。必须包括domcrawler组件和create_zip函数以使类功能。
  • 班级的工作方式

>它搜索图像,下载并将图像保存到文件夹中,创建文件夹的zip档案,最后删除文件夹。

>

>类使用Symfony的Domcrawler组件来搜索网页上找到的所有图像链接以及创建zip文件的自定义zip函数。借助David Walsh的ZIP功能。

编码类

>该类包括五个私人属性和八种公共方法,包括__ -Construct Magic方法。

下面的与Symfony的图像刮擦是类属性及其角色的列表。

1。$文件夹:存储包含刮擦图像的文件夹的名称。

2。$ URL:存储网页URL。
3。$ html:存储要刮擦的网页的HTML文档代码。
4。$文件名:存储zip文件的名称。
5。$状态:保存操作的状态。即,如果是成功或失败。
>
>让我们开始建立课程。

创建包含上述五个属性的类Zipimages。

创建一个接受URL作为参数的__ -construct魔法方法。
<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>
登录后复制
登录后复制
该方法是不言自明的。


创建的邮政编码具有一个包含刮擦图像的文件夹。下面的setFolder方法配置了以下内容。
<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>
登录后复制
登录后复制

默认情况下,文件夹名称设置为图像,但是该方法提供了一个选项,可以通过简单地将文件夹名称作为其参数来更改文件夹的名称。

<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提供了一个选项,可以将eftault名称设置为zipimages更改zip文件的名称:

<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>
登录后复制
登录后复制
在这一点上,我们实例化Symfony crawler组件以搜索图像,然后下载并将所有图像保存到文件夹中。

<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>
登录后复制
完成下载后,我们使用我们的自定义create_zip函数将图像文件夹压缩到zip存档。

最后,我们在创建zip文件后删除创建的文件夹。
<span>public function setFileName($name = "zipImages") {
</span>    <span>$this->fileName = $name;
</span><span>}</span>
登录后复制

获得操作的状态。即,如果成功或发生错误。

>
<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>
登录后复制

处理上述所有方法。

<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>
登录后复制

您可以从GitHub下载完整的课程。

<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>
登录后复制
class依赖

为了使课程工作,需要包括domcrawler组件和create_zip函数。您可以在此处下载此功能的代码。

>仅通过将以下要求语句添加到您的Composer.json文件:>通过作曲家下载并安装Domcrawler组件。

>运行$ php composer.phar安装以下载库并生成供应商/autoLoad.php autoLoader文件。

>

使用类
<span>public function getStatus() {
</span>    <span>echo $this->status;
</span><span>}</span>
登录后复制

确保通过自动加载或明确包含所有必需的文件。

>

>调用setFolder和setFilename方法,并通过其各自的参数。仅在需要更改文件夹名称时调用setFolder方法。
    >
  • 调用过程方法以使课程上班。
<span>public function process() {
</span>    <span>$this->domCrawler();
</span>    <span>$this->createZip();
</span>    <span>$this->deleteCreatedFolder();
</span>    <span>$this->getStatus();
</span><span>}</span>
登录后复制
摘要

在本文中,我们学会了如何创建一个简单的PHP图像刮刀,该剪贴画将自动将下载的图像压缩到ZIP档案中。如果您有其他解决方案或改进建议,请将其留在下面的评论中,欢迎所有反馈!与Symfony的图像刮擦

经常询问有关与Symfony的Domcrawler

刮擦图像的问题(常见问题解答)

Symfony的Domcrawler组件是什么?>>如何安装Symfony的Domcrawler组件?

安装Symfony的Domcrawler组件是直截了当。您可以使用PHP的依赖关系管理工具Composer。在项目目录中运行以下命令:作曲家需要Symfony/Dom-Crawler。这将下载并安装domcrawler组件及其依赖项。

>

>如何使用Symfony的Domcrawler组件来刮擦图像?

>使用Symfony的Domcrawler组件刮擦图像,您首先需要创建一个新的crawler类的实例,然后将HTML内容加载到其中。然后,您可以使用过滤器方法选择图像元素并提取其SRC属性。这是一个基本示例:

$ crawler = new Crawler($ html);
> $ crawler-> filter-> filter('img') - > every(function(crawler $ node) node-> attr('src');
});

>我可以将Symfony的Domcrawler组件与是的,您可以将Symfony的Domcrawler组件与Laravel一起使用。 Laravel的HTTP测试功能实际上使用了引擎盖下的Domcrawler组件。这意味着您可以使用相同的方法和技术在Laravel测试中遍历和操纵HTML内容。

>

>如何使用Symfony's Domcrawler组件选择元素?选择元素,包括过滤器,FilterXpath和SelectLink。这些方法允许您分别基于其标签名称,XPATH表达式或链接文本选择元素。

我可以使用Symfony的Domcrawler组件修改元素的内容吗?使用Symfony的DomCrawler组件修改元素的内容。每种方法都允许您迭代每个选定的元素并在其上执行操作。例如,您可以更改类似图像元素的src属性:

$ crawler-> filter-> filter('img') - > every(function(crawler $ node){

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

});

在使用Symfony's时如何处理错误和异常Domcrawler组件?


使用Symfony的Domcrawler组件时,可以使用Try-Catch块来处理错误和异常。例如,如果过滤器方法找不到任何匹配元素,它将抛出无效的exception。您可以捕获此异常并适当处理。

我可以使用Symfony的Domcrawler组件来刮擦需要身份验证的网站吗?但是,这需要其他步骤,例如以登录凭据发送发布请求并存储会话cookie。使用Symfony的Domcrawler组件提供的ATTAD方法的值。例如,要提取图像元素的SRC属性,您可以执行以下操作:

$ crawler-> filter('img') - > every(function(crawler $ node) $ node-> attr('src');

});

>不幸的是,我可以使用Symfony的Domcrawler组件来刮擦Ajax负载的内容吗?

不幸的是,Symfony的Domcrawler组件无法直接刮擦Ajax ajax的内容,因为它没有执行JavaScript。但是,您可以将Guzzle和Goutte之类的工具与Domcrawler组件结合使用来发送HTTP请求并处理AJAX负载的内容。

以上是与Symfony的图像刮擦的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1276
29
C# 教程
1256
24
说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? 说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? Apr 17, 2025 am 12:25 AM

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP和Python:解释了不同的范例 PHP和Python:解释了不同的范例 Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

您如何防止PHP中的SQL注入? (准备的陈述,PDO) 您如何防止PHP中的SQL注入? (准备的陈述,PDO) Apr 15, 2025 am 12:15 AM

在PHP中使用预处理语句和PDO可以有效防范SQL注入攻击。1)使用PDO连接数据库并设置错误模式。2)通过prepare方法创建预处理语句,使用占位符和execute方法传递数据。3)处理查询结果并确保代码的安全性和性能。

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

PHP:处理数据库和服务器端逻辑 PHP:处理数据库和服务器端逻辑 Apr 15, 2025 am 12:15 AM

PHP在数据库操作和服务器端逻辑处理中使用MySQLi和PDO扩展进行数据库交互,并通过会话管理等功能处理服务器端逻辑。1)使用MySQLi或PDO连接数据库,执行SQL查询。2)通过会话管理等功能处理HTTP请求和用户状态。3)使用事务确保数据库操作的原子性。4)防止SQL注入,使用异常处理和关闭连接来调试。5)通过索引和缓存优化性能,编写可读性高的代码并进行错误处理。

PHP的目的:构建动态网站 PHP的目的:构建动态网站 Apr 15, 2025 am 12:18 AM

PHP用于构建动态网站,其核心功能包括:1.生成动态内容,通过与数据库对接实时生成网页;2.处理用户交互和表单提交,验证输入并响应操作;3.管理会话和用户认证,提供个性化体验;4.优化性能和遵循最佳实践,提升网站效率和安全性。

在PHP和Python之间进行选择:指南 在PHP和Python之间进行选择:指南 Apr 18, 2025 am 12:24 AM

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

See all articles