使用PHP怎么实现远程抓取网站图片并保存功能

  介绍

今天就跟大家聊聊有关使用PHP怎么实现远程抓取网站图片并保存功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

具体如下:

& lt; PHP ?/* *   ,*一个用于抓取图片的类   ,*   ,* @package 违约   ,* @author  WuJunwei   ,*/class  download_image   {   public 才能;save_path美元;,,,,,,,,,//抓取图片的保存地址//抓才能取图片的大小限制(单位:字节),只抓比大小比这个限制大的图片   public 才能;img_size美元=0;//才能定义一个静态数组,用于记录曾经抓取过的的超链接地址,避免重复抓取   public 才能;static 数组$ a_url_arr=();   ,/* *   ,,*,@param  String  save_path 美元;,抓取图片的保存地址   ,,*,@param  Int , img_size 美元;,,抓取图片的保存地址   ,,*/public 才能;function  __construct (save_path, img_size美元)   {才能   ,,,这个→美元save_path=$ save_path;   ,,,这个→美元img_size=$ img_size;   ,,}   ,/* *   ,,*,递归下载抓取首页及其子页面图片的方法,(,recursive 递归)   ,,*   ,,*,@param , String  capture_url 美元;用于抓取图片的网址   ,,*   ,,*/public 才能;function  recursive_download_images (capture_url美元)   {才能   ,,,if  (! in_array (capture_url美元,自我:a_url_arr美元)),,//没抓取过   ,,,{   ,,,,,self:: $ a_url_arr []=$ capture_url;,,//计入静态数组   ,,,},else ,//抓取过,直接退出函数   ,,,{   ,,,,,返回;   ,,,}   ,,,这个→美元download_current_page_images ($ capture_url);,//下载当前页面的所有图片   ,,,//用@屏蔽掉因为抓取地址无法读取导致的警告错误   ,,,内容=@file_get_contents美元($ capture_url);   ,,,//匹配一个标签href属性中?之前部分的正则   ,,,a_pattern 美元;=,“| & lt;[^祝辞]+ href=https://www.yisu.com/zixun/(“/? ?([^ \”?]+)[' \ ">]| U”;   preg_match_all (a_pattern,内容,美元a_out美元,PREG_SET_ORDER);   数组$ tmp_arr=();//定义一个数组,用于存放当前循环下抓取图片的超链接地址   foreach (a_out k美元=> v)美元   {/* *   *去除超链接中的空”、“#”、“/焙椭馗粗?   * 1:超链接地址的值不能等于当前抓取页面的url,否则会陷入死循环   * 2:超链接为”或“#”,“/币彩潜疽趁?这样也会陷入死循环,   * 3:有时一个超连接地址在一个网页中会重复出现多次,如果不去除,会对一个子页面进行重复下载)   */如果(v美元[1]& & ! in_array (v[1],美元自我:a_url_arr美元)& & ! in_array (v[1],美元数组(‘#’,‘/?capture_url美元)))   {   美元tmp_arr []=$ v [1];   }   }   foreach (tmp_arr k美元=> v)美元   {//超链接路径地址   如果(大小写敏感(v美元,“http://? !url==false)//如果包含http://,可以直接访问   {   a_url=v美元;   }//否其他则证明是相对地址,需要重新拼凑超链接的访问地址   {   美元$ domain_url=substr (capture_url 0大小写敏感(capture_url美元,'/',8)+ 1);   a_url=domain_url美元。v美元;   }   $ this -> recursive_download_images ($ a_url);   }   }/* *   *下载当前网页下的所有图片   *   * @param字符串$ capture_url用于抓取图片的网页地址   * @return数组当前网页上所有图片img标签url地址的一个数组   */公共函数download_current_page_images (capture_url美元)   {   (内容=@file_get_contents美元capture_url);//屏蔽警告错误//匹配img标签src属性中?之前部分的正则   $ img_pattern=" | ] + [\”) ?([^ \”?]+)[' \ ">]| U”;   preg_match_all (img_pattern,内容,美元img_out美元,PREG_SET_ORDER);   $ photo_num=count ($ img_out);//匹配到的图片数量   回声“

”。capture_url美元。“共找到。”photo_num美元。“张图片

”;   foreach (img_out k美元=> v)美元   {   $ this -> save_one_img (capture_url, v美元[1]);   }   }/* *   *保存单个图片的方法   *   * @param字符串$ capture_url用于抓取图片的网页地址   * @param字符串$ img_url需要保存的图片的url   *   */公共函数save_one_img (capture_url, img_url美元)   {//图片路径地址   如果(大小写敏感(img_url美元,“http://? !==false)   {//img_url=img_url美元;   其他}   {   美元$ domain_url=substr (capture_url 0大小写敏感(capture_url美元,'/',8)+ 1);   img_url=domain_url美元。img_url美元;   }   (pathinfo=pathinfo美元img_url);//获取图片路径信息   pic_name=pathinfo美元(“:”);//获取图片的名字   如果(file_exists ($ this -> save_path。pic_name美元))//如果图片存在,证明已经被抓取过,退出函数   {   回声img_url美元。'

使用PHP怎么实现远程抓取网站图片并保存功能