www.adminn.cn
站长正能量分享网!

php抓取网站图片并保存本地服务器实例

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

本例子是使用了file_get_contents()函数来抓取图片内容然后再使用fopen保存到本地服务器了,然后再进行地址url替换这样就实现了一个完整的页面采集功能并保存地址到本地的做法了,下面来看看例子.

首先举个例子吧,代码如下:

  1. <?php 
  2. $text=file_get_contents("http://www.phpfensi.com"); 
  3. //取得所有img标签,并储存至二维阵列match 
  4. preg_match_all('/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/', $text$match); 
  5. //打印出match 
  6. $houzhui = "./tp/".time().rand(10000,50000).".".png; 
  7. $yuanname =  getImage($match[1][2],$houzhui,tp); 
  8. //下载图片方法 
  9. function getImage($url,$filename='',$type=0){ 
  10. if($url==''){return false;} 
  11. if($filename==''){ 
  12. $ext=strrchr($url,'.'); 
  13. if($ext!='.gif' && $ext!='.jpg'){return false;} 
  14. $filename=time().$ext
  15. //文件保存路径 
  16. if($type){ 
  17. $ch=curl_init(); 
  18. $timeout=5; 
  19. curl_setopt($ch,CURLOPT_URL,$url); 
  20. curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
  21. curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
  22. $img=curl_exec($ch); 
  23. curl_close($ch); 
  24. }else
  25. ob_start(); 
  26. readfile($url); 
  27. $img=ob_get_contents(); 
  28. ob_end_clean(); 
  29. $size=strlen($img); 
  30. //文件大小 
  31. $fp2=@fopen($filename,'a'); 
  32. fwrite($fp2,$img); 
  33. fclose($fp2); 
  34. return $filename
  35. ?> 

案例分析,核心代码如下:

  1. $text=file_get_contents("http://www.phpfensi.com"); 
  2. //取得所有img标签,并储存至二维阵列match 
  3. preg_match_all('/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/', $text$match); 

这个正则就是直接获取所有图片不管是http或直接是/aa/aa.gif文件都会自动抓保存到地址了,不过这个会有一些问题图片地址未进行补全了,如我们一个 /a/a/a.gif这样我们是找不到图片的,必须是http://www.phpfensi.com /a/a/a.gif 这样才可以下载到了,所以我们有必要进行两个处理方法一个是在原基本上处理,代码如下:

  1. //文件保存路径 
  2. if($type){ 
  3. $ch=curl_init(); 
  4. $timeout=5; 
  5. curl_setopt($ch,CURLOPT_URL,$url);  
  6. curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
  7. curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
  8. $img=curl_exec($ch); 
  9. curl_close($ch); 

上面的$url参数进行地址补全,如我采集的是http://www.phpfensi.com那么地址自动补全为绝对路径了,另一种办法就是使用修改正则表达式,代码如下:

  1. preg_match_all("/(src|SRC)=[\"|'| ]{0,}(http:\/\/(.*)\.(gif|jpg|jpeg|png))/isU",$body,$img_array);  

这样就只获取以http开头的图片文件了哦.

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《php抓取网站图片并保存本地服务器实例》
文章链接:https://www.adminn.cn/news/8150.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

扫码支付后请联系右侧QQ发送下载地址!!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏