インターネット上の特定の Web ページのコンテンツを収集する必要がある場合、対象の Web サイト上の写真がホットリンクから保護されている場合、収集した写真は当社自身の Web サイトで直接利用できなくなります。次に、プログラムを使用して対象の Web サイト上の画像を Web サイトのサーバーにダウンロードすると、その画像を呼び出すことができます。
この記事ではPHPを使用してリモート画像収集機能を実装します。基本的なプロセス:
1. 対象の Web サイトの画像アドレスを取得します。
2. 画像の内容を読みます。
3. 画像を保存するパスを作成し、画像に名前を付けます。
4. 画像の内容を書き込みます。
5. 完了します。
このプロセスは、いくつかの関数を作成して実装します。
関数 make_dir() はディレクトリを作成します。保存する画像ファイルのディレクトリが存在するか確認し、存在しない場合はディレクトリを作成し、書き込み権限を設定してください。
コードをコピーします コードは次のとおりです:
function make_dir($path){
If(!file_exists($path)){// 存在しない場合は作成します
$mk=@mkdir($path,0777) //権限
;
@chmod($path,0777);
}
true を返します。
関数 read_filetext() は画像コンテンツを取得します。 fopen を使用してイメージ ファイルを開き、次に fread を使用してイメージ ファイルの内容を読み取ります。
コードをコピーします コードは次のとおりです:
関数 read_filetext($filepath){
$ファイルパス=トリム($ファイルパス);
$htmlfp=@fopen($filepath,"r");
//リモート
If(strstr($filepath,"://")){
while($data=@fread($htmlfp,500000)){
$string.=$data;
}
}
//ローカル
他{
$string=@fread($htmlfp,@filesize($filepath));
}
@fclose($htmlfp);
$string を返します。
}
関数 write_filetext() はファイルを書き込み、画像コンテンツ fputs をファイルに書き込みます。つまり、画像ファイルは保存されます。
コードをコピーします
コードは次のとおりです:
関数 write_filetext($filepath,$string){
//$string=ストリップスラッシュ($string);
$fp=@fopen($filepath,"w");
@fputs($fp,$string);
@fclose($fp);
}
get_filename() 関数はイメージ名を取得します。また、保存するファイル名をカスタマイズすることもできます。
コードをコピーします
コードは次のとおりです:
関数 get_filename($filepath){
$fr=explode("/",$ファイルパス);
$count=count($fr)-1;
$fr[$count] を返します
次に、いくつかの関数を組み合わせて関数 save_pic() で呼び出し、最後に保存された画像のパスを返します。
コードをコピーします
コードは次のとおりです:
関数 save_pic($url,$savepath=''){
//処理アドレス
$url=トリム($url);
$url=str_replace(" ","%20",$url);
//ファイルを読み取る
$string=read_filetext($url);
If(空($string)){
echo 'ファイルを読み取れません';終了
;
}
//ファイル名
$filename = get_filename($url);
//保存ディレクトリ
Make_dir($savepath) // 保存ディレクトリを作成します
//ファイルアドレス
$ファイルパス = $保存パス.$ファイル名
//ファイルを書き込む
write_filetext($filepath,$string);
$ファイルパスを返します
}
最後のステップでは、save_pic() 関数を呼び出して画像を保存します。テストには次のコードを使用します。
コードをコピーします
コードは次のとおりです:
//対象の画像アドレス
$pic = "http://img0.pconline.com.cn/pconline/1205/06/2776119_end1_thumb.jpg";
//ディレクトリを保存します
$savepath = "画像/";
echo save_pic($pic,$savepath);
実際のアプリケーションでは、アンチホットリンク画像の収集を含む、製品情報などの特定のサイトのコンテンツを収集し、Web サイト上のサーバーに保存することがあります。現時点では、通常のマッチングを使用してページのコンテンツを照合し、ページ内で一致するすべての写真を見つけて、それらをそれぞれ Web サイトのサーバーにダウンロードして、写真のコレクションを完成させることができます。次のコードはテスト専用です:
コードをコピーします コードは次のとおりです:
関数 get_pic($cont,$path){
$pattern_src = '//';
$num = preg_match_all($pattern_src, $cont, $match_src);
$pic_arr = $match_src[1] //画像配列を取得します
;
foreach ($pic_arr as $pic_item) { //ループして各画像のアドレスを取得します
save_pic($pic_item,$path) //画像をダウンロードして保存します
エコー「[OK]..!」
}
}
次に、ページ コンテンツを分析してメイン コンテンツを見つけ、get_pic() を呼び出して画像を保存します。
コードをコピーします
コードは次のとおりです:
//PConline の携帯電話に関するレポートのコンテンツ ページから写真を収集します
$url = "http://gz.pconline.com.cn/321/3215791.html";
$content = file_get_contents($url);//Web コンテンツを取得します
$preg = '#
(.*)
#iUs';
preg_match_all($preg, $content, $arr);
$cont = $arr[1][0];
get_pic($cont,'img/');
上記のコードは作成者によって個人的にテストされており、画像を収集できますが、たとえば、ターゲット Web サイトが 302 回以上のジャンプを行った場合など、いくつかのシナリオがまだ考慮されていません。さまざまな反収集方法を試すのは好きな生徒に任せます。
http://www.bkjia.com/PHPjc/824692.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/824692.html
技術記事インターネット上の特定の Web ページのコンテンツを収集する必要がある場合、対象の Web サイト上の写真がホットリンクから保護されている場合、収集した写真は当社の Web サイトで直接利用できなくなります。それは…