私の写真家の友人は、インターネットから額縁の画像を見つけてダウンロードするように私を懇願しました。私は最終的に、それらの多くが無料で利用できるWebページに着地しましたが、問題がありました。すべての画像を一緒にダウンロードするためのリンクは存在しませんでした。
画像を個別にダウンロードするストレスを経験したくなかったので、このPHPクラスを書き、Webサイトで見つかったすべての画像を見つけ、ダウンロードし、zipしました。
キーテイクアウト- PHPクラスでは、SymfonyのDomcrawlerコンポーネントを使用して、Webページから画像をスクレイプし、フォルダーにダウンロードして保存し、フォルダーのzipアーカイブを作成し、フォルダーを削除します。このクラスは、Webサイトから複数の画像をダウンロードするプロセスを自動化するように設計されています。
- クラスには、5つの私有地と8つのパブリックメソッドが含まれています。プロパティは、フォルダー名、WebページURL、HTMLドキュメントコード、ZIPファイル名、操作ステータスなどの情報を保存します。メソッドには、フォルダーとファイル名を設定し、domcrawlerをインスタンス化し、画像をダウンロードして保存し、zipファイルを作成し、フォルダーを削除し、操作ステータスを取得する機能が含まれます。 クラスを使用するには、すべての必要なファイルをAutoloadまたは明示的に含める必要があります。 SetFolderおよびSetFileNameメソッドは、それぞれの引数を使用して呼び出され、プロセスメソッドが呼び出され、クラスを機能させる必要があります。 domcrawlerコンポーネントとcreate_zip関数を含める必要があります。
- クラスの仕組み
- 画像のURLを検索し、画像をフォルダーにダウンロードして保存し、フォルダーのzipアーカイブを作成し、最後にフォルダーを削除します。
クラスのコーディング
クラスは、5つの私有地と__ Construct Magicメソッドを含む8つのパブリックメソッドで構成されています。
以下は、クラスのプロパティとその役割のリストです。
1。$フォルダー:削られた画像を含むフォルダーの名前を保存します。2。$ URL:WebページURLを保存します。
3。$ HTML:WebページのHTMLドキュメントコードを削減するために保存します。
4。$ filename:zipファイルの名前を保存します。
5。$ステータス:操作のステータスを保存します。つまり、それが成功または失敗であった場合。
クラスの構築を始めましょう。
上記の5つのプロパティを含むクラスのzipimagesを作成します。
URLを引数として受け入れる__construct Magicメソッドを作成します。
作成されたZIPアーカイブには、削り取られた画像を含むフォルダーがあります。以下のSetFolderメソッドはこれを構成します
デフォルトでは、フォルダー名は画像に設定されていますが、メソッドは、フォルダー名を引数として単に渡すだけで、フォルダーの名前を変更するオプションを提供します。
<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は、zipimagesに設定されたデフォルトの名前を使用してzipファイルの名前を変更するオプションを提供します。
この時点で、Symfony Crawlerコンポーネントをインスタンス化して画像を検索し、すべての画像をフォルダーにダウンロードして保存します。<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>
ダウンロードが完了したら、カスタムcreate_zip関数を使用して画像フォルダーをzipアーカイブに圧縮します。
<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>
githubから完全なクラスをダウンロードできます。
<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>
クラス依存関係
クラスが機能するには、domcrawlerコンポーネントとcreate_zip関数を含める必要があります。この関数のコードをこちらからダウンロードできます。<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>
次の要求ステートメントをComposer.jsonに追加するだけで、Composerを介してDomcrawlerコンポーネントをダウンロードしてインストールします。
$ php composer.pharインストールを実行してライブラリをダウンロードし、ベンダー/autoload.php autoloaderファイルを生成します。 クラスを使用して
<span>public function getStatus() { </span> <span>echo $this->status; </span><span>}</span>
- 要約 この記事では、ダウンロードした画像をZIPアーカイブに自動的に圧縮するシンプルなPHP画像スクレーパーを作成する方法を学びました。改善のための代替ソリューションまたは提案がある場合は、以下のコメントに残してください。すべてのフィードバックは大歓迎です!
- SymfonyのDomcrawlerでの画像のスクレイピングに関するよくある質問(FAQ)
- SymfonyのDomcrawlerコンポーネントをインストールするにはどうすればよいですか?簡単です。 PHPの依存関係管理ツールであるComposerを使用できます。プロジェクトディレクトリで次のコマンドを実行します。ComposerはSymfony/Dom-Crawlerを必要とします。これにより、domcrawlerコンポーネントが依存関係とともにダウンロードしてインストールされます。
$ crawler = new crawler($ html); $ crawler-> filter( 'img') - >それぞれ(function(crawler $ node){
はい、Laravelを使用したSymfonyのDomcrawlerコンポーネントを使用できます。 LaravelのHTTPテスト機能は、実際にはフードの下にDomcrawlerコンポーネントを使用しています。これは、同じ方法とテクニックを使用して、LaravelテストでHTMLコンテンツを横断および操作できることを意味します。SymfonyのDomcrawlerコンポーネントを使用して要素を選択するにはどうすればよいですか?フィルター、FilterXPath、SelectLinkなどの要素を選択します。これらの方法では、それぞれタグ名、Xpath式、またはリンクテキストに基づいて要素を選択できます。SymfonyのDomcrawlerコンポーネントを使用して要素のコンテンツを変更できますか? SymfonyのDomcrawlerコンポーネントを使用して、要素の内容を変更します。各メソッドにより、選択した各要素を反復し、その操作を実行できます。たとえば、次のような画像要素のSRC属性を変更できます。 attr( 'src'、 'new-image.jpg');
echo $ node-> attr( 'src');
});
symfonyのdomcrawlerコンポーネントを使用できますかlaravel?});
symfonyを使用するときにエラーと例外を処理するにはどうすればよいですかdomcrawlerコンポーネント?
$ crawler-> filter( 'img') - >それぞれ(function(crawler $ node){
echo $ node-> attr( 'src');});
SymfonyのDomcrawlerコンポーネントを使用してAjaxロードのコンテンツをスクレイプできますか?
残念ながら、SymfonyのDomcrawlerコンポーネントは、JavaScriptを実行しないため、Ajaxにロードされたコンテンツを直接スクレイすることはできません。ただし、GuzzleやGoutteなどのツールをDomcrawlerコンポーネントと組み合わせて使用して、HTTPリクエストを送信し、Ajax-Loadedコンテンツを処理できます。
以上がSymfony&#x27; s Domcrawlerでの画像削りの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

ストレージ:: Laravelフレームワークのダウンロード方法は、ファイルストレージの抽象化を管理しながら、ファイルのダウンロードを安全に処理するための簡潔なAPIを提供します。 サンプルコントローラーでストレージ::ダウンロード()を使用する例は次のとおりです。

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

Laravelのサービスコンテナとサービスプロバイダーは、そのアーキテクチャの基本です。 この記事では、サービスコンテナ、詳細サービスプロバイダーの作成、登録、および実用的な使用法を例で説明します。 Oveから始めます


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

WebStorm Mac版
便利なJavaScript開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

ホットトピック









