搜索
首页后端开发php教程与Symfony的图像刮擦

与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></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></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>
</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>

您可以从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
unset()和session_destroy()有什么区别?unset()和session_destroy()有什么区别?May 04, 2025 am 12:19 AM

Thedifferencebetweenunset()andsession_destroy()isthatunset()clearsspecificsessionvariableswhilekeepingthesessionactive,whereassession_destroy()terminatestheentiresession.1)Useunset()toremovespecificsessionvariableswithoutaffectingthesession'soveralls

在负载平衡的情况下,什么是粘性会话(会话亲和力)?在负载平衡的情况下,什么是粘性会话(会话亲和力)?May 04, 2025 am 12:16 AM

stickysessensureuserRequestSarerOutedTothesMeServerForsessionDataConsisterency.1)sessionIdentificeAssificationAssigeaSsignAssignSignSuserServerServerSustersusiseCookiesorUrlModifications.2)一致的ententRoutingDirectSsssssubsequeSssubsequeSubsequestrequestSameSameserver.3)loadBellankingDisteributesNebutesneNewuserEreNevuseRe.3)

PHP中有哪些不同的会话保存处理程序?PHP中有哪些不同的会话保存处理程序?May 04, 2025 am 12:14 AM

phpoffersvarioussessionsionsavehandlers:1)文件:默认,简单的ButMayBottLeneckonHigh-trafficsites.2)Memcached:高性能,Idealforsforspeed-Criticalapplications.3)REDIS:redis:similartomemememememcached,withddeddeddedpassistence.4)withddeddedpassistence.4)databases:gelifforcontrati forforcontrati,有用

PHP中的会话是什么?为什么使用它们?PHP中的会话是什么?为什么使用它们?May 04, 2025 am 12:12 AM

PHP中的session是用于在服务器端保存用户数据以在多个请求之间保持状态的机制。具体来说,1)session通过session_start()函数启动,并通过$_SESSION超级全局数组存储和读取数据;2)session数据默认存储在服务器的临时文件中,但可通过数据库或内存存储优化;3)使用session可以实现用户登录状态跟踪和购物车管理等功能;4)需要注意session的安全传输和性能优化,以确保应用的安全性和效率。

说明PHP会话的生命周期。说明PHP会话的生命周期。May 04, 2025 am 12:04 AM

PHPsessionsstartwithsession_start(),whichgeneratesauniqueIDandcreatesaserverfile;theypersistacrossrequestsandcanbemanuallyendedwithsession_destroy().1)Sessionsbeginwhensession_start()iscalled,creatingauniqueIDandserverfile.2)Theycontinueasdataisloade

绝对会话超时有什么区别?绝对会话超时有什么区别?May 03, 2025 am 12:21 AM

绝对会话超时从会话创建时开始计时,闲置会话超时则从用户无操作时开始计时。绝对会话超时适用于需要严格控制会话生命周期的场景,如金融应用;闲置会话超时适合希望用户长时间保持会话活跃的应用,如社交媒体。

如果会话在服务器上不起作用,您将采取什么步骤?如果会话在服务器上不起作用,您将采取什么步骤?May 03, 2025 am 12:19 AM

服务器会话失效可以通过以下步骤解决:1.检查服务器配置,确保会话设置正确。2.验证客户端cookies,确认浏览器支持并正确发送。3.检查会话存储服务,如Redis,确保其正常运行。4.审查应用代码,确保会话逻辑正确。通过这些步骤,可以有效诊断和修复会话问题,提升用户体验。

session_start()函数的意义是什么?session_start()函数的意义是什么?May 03, 2025 am 12:18 AM

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

See all articles

热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

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

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器