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访问查询mysql数据的三种方法
Oct 09 PHP
用php的ob_start来生成静态页面的方法分析
Mar 09 PHP
PHP学习散记_编码(json_encode 中文不显示)
Nov 10 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
Nov 25 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
ThinkPHP模板中数组循环实例
Oct 30 PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
Oct 21 PHP
PHP下载文件的函数实例代码
May 18 PHP
php正则表达式基本知识与应用详解【经典教程】
Apr 17 PHP
PHP+MySQL实现模糊查询员工信息功能示例
Jun 01 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中文工具类ChineseUtil
2018/02/23 PHP
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
详细解析Python中__init__()方法的高级应用
2015/05/11 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
python执行使用shell命令方法分享
2017/11/08 Python
Python实现线程状态监测简单示例
2018/03/28 Python
Python Requests库基本用法示例
2018/08/20 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
医院实习介绍信
2014/01/12 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
保密工作承诺书
2014/08/29 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
街道务虚会发言材料
2014/10/20 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
CocosCreator入门教程之网络通信
2021/04/16 Javascript
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL
Python机器学习应用之工业蒸汽数据分析篇详解
2022/01/18 Python
Python与C++中梯度方向直方图的实现
2022/03/17 Python