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

与Symfony的图像刮擦

Jennifer Aniston
发布: 2025-02-21 08:47:11
原创
515 人浏览过

与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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板