ホームページ >バックエンド開発 >PHPチュートリアル >Web サイトの画像をリモートで取得して保存するための PHP コード

Web サイトの画像をリモートで取得して保存するための PHP コード

WBOY
WBOYオリジナル
2016-07-25 09:12:591064ブラウズ

ウェブサイトのデータをキャプチャするための PHP コードの例。

  1. /**
  2. * 画像を取得するためのクラス
  3. *
  4. * @package のデフォルト
  5. * @author WuJunwei
  6. */
  7. class download_image
  8. {
  9. public $save_path //キャプチャ画像の保存アドレス
  10. //キャプチャ画像のサイズ制限(単位: バイト) この制限より大きいサイズの画像のみをキャプチャします
  11. public $img_size=0;
  12. //クロールの繰り返しを避けるために、クロールされたハイパーリンク アドレスを記録する静的配列を定義します
  13. public static $ a_url_arr=array() ;
  14. /**
  15. * @param String $save_path キャプチャ画像の保存アドレス
  16. * @param Int $img_size キャプチャ画像の保存アドレス
  17. */
  18. パブリック関数 __construct($save_path,$img_size)
  19. {
  20. $this->save_path=$save_path;
  21. }
  22. /**
  23. * ホームページとそのサブページの画像を再帰的にダウンロードしてキャプチャする方法 (再帰的再帰)
  24. *
  25. * @param String $capture_url 画像をキャプチャするために使用される URL
  26. *
  27. */
  28. public function recursive_download_images($capture_url)
  29. {
  30. if (!in_array($capture_url,self::$a_url_arr)) //キャプチャされません
  31. {
  32. self: :$a_url_arr[]=$ Capture_url; //静的配列にカウントされます
  33. } else //キャプチャ後、関数を直接終了します
  34. {
  35. return; }
  36. $this->down​​load_current_page_images($capture_url); // 現在のページのすべての画像をダウンロードします
  37. //キャプチャ アドレスを読み取れないことによる警告エラーをブロックするには、@ を使用します
  38. $content=@file_get_contents($capture_url);
  39. // a タグの href 属性の前にある通常のパターンと一致します
  40. $a_pattern = "|]+href=['" ]?([^ '"?]+)['" >]|U";
  41. preg_match_all($a_pattern, $content, $a_out, PREG_SET_ORDER);
  42. $tmp_arr=array(); // 現在のループでキャプチャされた画像のハイパーリンク アドレスを格納する配列を定義します
  43. foreach ($a_out as $k => $v)
  44. {
  45. /**
  46. * ハイパーリンク内の空の ''、'#'、'/' および重複する値を削除します
  47. * 1: ハイパーリンク アドレスの値は、現在クロールされているページの URL と等しくすることはできません。そうでない場合は、無限ループ
  48. * 2: ハイパーリンクは '' または '#'、'/' はこのページでもあり、これも無限ループに陥ります。
  49. * 3: ハイパーリンク アドレスが Web ページ内に複数回表示されることがあります。削除しないと、繰り返しダウンロードするとサブページが破損する可能性があります)
  50. */
  51. if ( $v[1] && !in_array($v[1],self::$a_url_arr) &&!in_array($v[1],array('#',' /',$) Capture_url) ) )
  52. {
  53. $tmp_arr[]=$v[1];
  54. }
  55. }
  56. foreach ($tmp_arr as $k => $v)
  57. {
  58. //ハイパーリンクパスアドレス
  59. if ( strpos( $v, 'http://')!==false ) // URL に http:// が含まれている場合は、直接アクセスできます
  60. {
  61. $a_url = $v
  62. }else // それ以外の場合、証明は相対的です。アドレス、ハイパーリンクのアクセス アドレスを再構築する必要があります
  63. {
  64. $domain_url = substr($capture_url, 0,strpos($capture_url, '/',8)+1);
  65. $a_url=$domain_url.$v;
  66. }
  67. $ this-> recursive_download_images($ a_url); / /シールド警告エラー
  68. // img タグの src 属性の ? より前の通常の部分と一致します
  69. $img_pattern = "|]+src=['" ]?([^ '" ?]+) ['" > ;'.$capture_url . "見つかった合計" . $photo_num . " photos";
  70. foreach ($img_out as $k => $v)
  71. {
  72. $this- >save_one_img($capture_url ,$v[1]);
  73. /**
  74. * 単一の画像を保存するメソッド
  75. *
  76. * @param String $capture_url 画像のキャプチャに使用される Web アドレス
  77. * @param String $img_url 保存する必要がある画像の URL
  78. *
  79. */
  80. public function save_one_img($capture_url,$img_url)
  81. {
  82. //画像パスアドレス
  83. if ( strpos($img_url, 'http://')!==false )
  84. {
  85. // $img_url = $img_url;
  86. }else
  87. $domain_url = substr($capture_url, 0,strpos($capture_url, '/',8)+1);
  88. $img_url=$domain_url.$img_url ;
  89. }
  90. $pathinfo = pathinfo($img_url); //画像のパス情報を取得します
  91. $pic_name=$pathinfo['basename'] //画像の名前を取得します
  92. if (file_exists($this-> save_path.$ pic_name)) // 画像が存在する場合、それがキャプチャされたことを証明し、関数を終了します
  93. {
  94. echo $img_url '画像はキャプチャされました !
    ';
  95. return; }
  96. //画像の内容を文字列に読み込みます
  97. $img_data = @file_get_contents($img_url);画像アドレスが読み取れません
  98. による警告エラーを取得 if ( strlen($img_data) > $this->img_size ) // サイズが制限より大きい画像をダウンロード
  99. {
  100. $img_size = file_put_contents($this- >save_path . $pic_name, $img_data);
  101. if ($img_size)
  102. {
  103. echo $img_url . '画像が正常に保存されました!
    '; } else
  104. {
  105. echo $img_url '画像を保存できませんでした!';
  106. }
  107. } else
  108. {
  109. echo $img_url . '画像の読み取りに失敗しました!
    ';
  110. }
  111. }
  112. } // END
  113. set_time_limit(120) // 状況に応じてスクリプトの最大実行時間を設定します
  114. $download_img=new download_image('E:/images/', 0); //ダウンロード画像オブジェクトをインスタンス化します
  115. $download_img->recursive_download_images('http://bbs.it-home.org/') //再帰的キャプチャ画像メソッド
  116. //$download_img->download_current_page_images( $_POST['capture_url']); //現在のページの写真のみを取得します
  117. コードをコピーします
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。