与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方法。
下面的是类属性及其角色的列表。
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>
<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>
<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>
最后,我们在创建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>
为了使课程工作,需要包括domcrawler组件和create_zip函数。您可以在此处下载此功能的代码。
>仅通过将以下要求语句添加到您的Composer.json文件:
>运行$ 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的Domcrawler组件是什么?>
>如何使用Symfony的Domcrawler组件来刮擦图像?
>使用Symfony的Domcrawler组件刮擦图像,您首先需要创建一个新的crawler类的实例,然后将HTML内容加载到其中。然后,您可以使用过滤器方法选择图像元素并提取其SRC属性。这是一个基本示例:
$ crawler = new Crawler($ html);
> $ crawler-> filter-> filter('img') - > every(function(crawler $ node) node-> attr('src');
});
>
>如何使用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属性,您可以执行以下操作:
});
>不幸的是,我可以使用Symfony的Domcrawler组件来刮擦Ajax负载的内容吗?
不幸的是,Symfony的Domcrawler组件无法直接刮擦Ajax ajax的内容,因为它没有执行JavaScript。但是,您可以将Guzzle和Goutte之类的工具与Domcrawler组件结合使用来发送HTTP请求并处理AJAX负载的内容。
以上是与Symfony的图像刮擦的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

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

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

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

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

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

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

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