ウェブサイトのデータをキャプチャするための PHP コードの例。
-
- /**
- * 画像を取得するためのクラス
- *
- * @package のデフォルト
- * @author WuJunwei
- */
- class download_image
- {
-
- public $save_path //キャプチャ画像の保存アドレス
-
- //キャプチャ画像のサイズ制限(単位: バイト) この制限より大きいサイズの画像のみをキャプチャします
- public $img_size=0;
-
- //クロールの繰り返しを避けるために、クロールされたハイパーリンク アドレスを記録する静的配列を定義します
- public static $ a_url_arr=array() ;
-
- /**
- * @param String $save_path キャプチャ画像の保存アドレス
- * @param Int $img_size キャプチャ画像の保存アドレス
- */
- パブリック関数 __construct($save_path,$img_size)
- {
- $this->save_path=$save_path;
- }
-
- /**
- * ホームページとそのサブページの画像を再帰的にダウンロードしてキャプチャする方法 (再帰的再帰)
- *
- * @param String $capture_url 画像をキャプチャするために使用される URL
- *
- */
- public function recursive_download_images($capture_url)
- {
- if (!in_array($capture_url,self::$a_url_arr)) //キャプチャされません
- {
- self: :$a_url_arr[]=$ Capture_url; //静的配列にカウントされます
- } else //キャプチャ後、関数を直接終了します
- {
- return; }
-
- $this->download_current_page_images($capture_url); // 現在のページのすべての画像をダウンロードします
-
- //キャプチャ アドレスを読み取れないことによる警告エラーをブロックするには、@ を使用します
- $content=@file_get_contents($capture_url);
-
- // a タグの href 属性の前にある通常のパターンと一致します
- $a_pattern = "|]+href=['" ]?([^ '"?]+)['" >]|U";
- preg_match_all($a_pattern, $content, $a_out, PREG_SET_ORDER);
-
- $tmp_arr=array(); // 現在のループでキャプチャされた画像のハイパーリンク アドレスを格納する配列を定義します
- foreach ($a_out as $k => $v)
- {
- /**
- * ハイパーリンク内の空の ''、'#'、'/' および重複する値を削除します
- * 1: ハイパーリンク アドレスの値は、現在クロールされているページの URL と等しくすることはできません。そうでない場合は、無限ループ
- * 2: ハイパーリンクは '' または '#'、'/' はこのページでもあり、これも無限ループに陥ります。
- * 3: ハイパーリンク アドレスが Web ページ内に複数回表示されることがあります。削除しないと、繰り返しダウンロードするとサブページが破損する可能性があります)
- */
- if ( $v[1] && !in_array($v[1],self::$a_url_arr) &&!in_array($v[1],array('#',' /',$) Capture_url) ) )
- {
- $tmp_arr[]=$v[1];
- }
- }
-
- foreach ($tmp_arr as $k => $v)
- {
- //ハイパーリンクパスアドレス
- if ( strpos( $v, 'http://')!==false ) // URL に http:// が含まれている場合は、直接アクセスできます
- {
- $a_url = $v
- }else // それ以外の場合、証明は相対的です。アドレス、ハイパーリンクのアクセス アドレスを再構築する必要があります
- {
- $domain_url = substr($capture_url, 0,strpos($capture_url, '/',8)+1);
- $a_url=$domain_url.$v;
- }
- $ this-> recursive_download_images($ a_url); / /シールド警告エラー
-
- // img タグの src 属性の ? より前の通常の部分と一致します
- $img_pattern = "|]+src=['" ]?([^ '" ?]+) ['" > ;'.$capture_url . "見つかった合計" . $photo_num . " photos";
- foreach ($img_out as $k => $v)
- {
- $this- >save_one_img($capture_url ,$v[1]);
-
- /**
- * 単一の画像を保存するメソッド
- *
- * @param String $capture_url 画像のキャプチャに使用される Web アドレス
- * @param String $img_url 保存する必要がある画像の URL
- *
- */
- public function save_one_img($capture_url,$img_url)
- {
- //画像パスアドレス
- if ( strpos($img_url, 'http://')!==false )
- {
- // $img_url = $img_url;
- }else
- $domain_url = substr($capture_url, 0,strpos($capture_url, '/',8)+1);
- $img_url=$domain_url.$img_url ;
- }
- $pathinfo = pathinfo($img_url); //画像のパス情報を取得します
- $pic_name=$pathinfo['basename'] //画像の名前を取得します
- if (file_exists($this-> save_path.$ pic_name)) // 画像が存在する場合、それがキャプチャされたことを証明し、関数を終了します
- {
- echo $img_url '画像はキャプチャされました !
';
- return; }
- //画像の内容を文字列に読み込みます
- $img_data = @file_get_contents($img_url);画像アドレスが読み取れません
- による警告エラーを取得 if ( strlen($img_data) > $this->img_size ) // サイズが制限より大きい画像をダウンロード
- {
- $img_size = file_put_contents($this- >save_path . $pic_name, $img_data);
- if ($img_size)
- {
- echo $img_url . '画像が正常に保存されました! span>
'; } else
- {
- echo $img_url '画像を保存できませんでした!';
- }
- } else
- {
- echo $img_url . '画像の読み取りに失敗しました!
';
- }
- }
- } // END
-
- set_time_limit(120) // 状況に応じてスクリプトの最大実行時間を設定します
- $download_img=new download_image('E:/images/', 0); //ダウンロード画像オブジェクトをインスタンス化します
- $download_img->recursive_download_images('http://bbs.it-home.org/') //再帰的キャプチャ画像メソッド
- //$download_img->download_current_page_images( $_POST['capture_url']); //現在のページの写真のみを取得します
-
-
- コードをコピーします
-
|