php抓取并保存网站图片的实现代码


Posted in PHP onOctober 28, 2015

此程序实现了网页源代码捕获,图片链接获取、分析、并将同样的图片链接合并功能,实现了图片抓取功能。利用php强大的网络内容处理函数将指定的网站上的所有图片抓取下来,保存在当前目录下,以下为代码:

<?php 
/*完成网页内容捕获功能*/ 
function get_img_url($site_name){ 
 $site_fd = fopen($site_name, "r"); 
 $site_content = ""; 
 while (!feof($site_fd)) { 
  $site_content .= fread($site_fd, 1024); 
 } 
 /*利用正则表达式得到图片链接*/ 
 $reg_tag = '/<img.*?\"([^\"]*(jpg|bmp|jpeg|gif)).*?>/'; 
 $ret = preg_match_all($reg_tag, $site_content, $match_result); 
 fclose($site_fd); 
 return $match_result[1]; 
} 
 
/* 对图片链接进行修正 */ 
function revise_site($site_list, $base_site){ 
 foreach($site_list as $site_item) { 
  if (preg_match('/^http/', $site_item)) { 
   $return_list[] = $site_item; 
  }else{ 
   $return_list[] = $base_site."/".$site_item; 
 } 
 } 
 return $return_list; 
} 
 
/*得到图片名字,并将其保存在指定位置*/ 
function get_pic_file($pic_url_array, $pos){ 
 $reg_tag = '/.*\/(.*?)$/'; 
 $count = 0; 
 foreach($pic_url_array as $pic_item){ 
  $ret = preg_match_all($reg_tag,$pic_item,$t_pic_name); 
  $pic_name = $pos.$t_pic_name[1][0]; 
  $pic_url = $pic_item; 
 print("Downloading ".$pic_url." "); 
  $img_read_fd = fopen($pic_url,"r"); 
  $img_write_fd = fopen($pic_name,"w"); 
  $img_content = ""; 
  while(!feof($img_read_fd)){ 
   $img_content .= fread($img_read_fd,1024); 
   
  } 
  fwrite($img_write_fd,$img_content); 
  fclose($img_read_fd); 
  fclose($img_write_fd); 
  print("[OK] "); 
 } 
 return 0; 
} 
 
function main(){ 
/* 待抓取图片的网页地址 */ 
 $site_name = "https://3water.com/sheying/391528.html"; 
 $img_url = get_img_url($site_name); 
 $img_url_revised = revise_site($img_url, $site_name); 
 $img_url_unique = array_unique($img_url_revised); //unique array 
 get_pic_file($img_url_unique,"./"); 
} 
 
main(); 
?>

此程序还有待完善的地方是,如果图片在网站服务器上不同目录下但文件名是相同的,此时图片有可能是不一样的,但在最后保存时,后面得到的图片会将前面已经保存的图片覆盖掉,解决方法是在每次保存前先检索当前目录下是否已有此文件名,有的话对将要保存的图片重新命名即可。

以上就是为大家分享的php抓取并保存网站图片的方法,以及在实践过程中修正程序不完善的地方,希望这篇文章对大家的学习有所帮助。

PHP 相关文章推荐
PHP 常用函数库和一些实用小技巧
Jan 01 PHP
php strstr查找字符串中是否包含某些字符的查找函数
Jun 03 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
Codeigniter(CI)框架分页函数及相关知识
Nov 03 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
Mar 25 PHP
php curl中gzip的压缩性能测试实例分析
Nov 08 PHP
PHP三种方式实现链式操作详解
Jan 21 PHP
php 中phar包的使用教程详解
Oct 26 PHP
php设计模式之装饰模式应用案例详解
Jun 17 PHP
php中数组最简单的使用方法
Dec 27 PHP
php判断当前操作系统类型
Oct 28 #PHP
详解PHP序列化反序列化的方法
Oct 27 #PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 #PHP
php常量详细解析
Oct 27 #PHP
php过滤所有的空白字符(空格、全角空格、换行等)
Oct 27 #PHP
PHP的APC模块实现上传进度条
Oct 27 #PHP
php+ajax制作无刷新留言板
Oct 27 #PHP
You might like
php模板中出现空行解决方法
2011/03/08 PHP
PHP实现抓取迅雷VIP账号的方法
2015/07/30 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
2016/11/24 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
js实现全选和全不选
2020/07/28 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python 从远程服务器下载日志文件的程序
2013/02/10 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
python sorted函数的小练习及解答
2019/09/18 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
什么是GWT的Module
2013/01/20 面试题
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
特色冷饮店创业计划书
2014/01/28 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
公开服务承诺制度
2014/03/26 职场文书
高中学生期末评语
2014/04/25 职场文书
党建工作先进材料
2014/05/02 职场文书
学习十八大演讲稿
2014/09/15 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL