與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適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip
