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修改时间格式的代码
May 29 PHP
PHP中将数组转成XML格式的实现代码
Aug 08 PHP
php设计模式之单例模式实例分析
Feb 25 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
Symfony2安装第三方Bundles实例详解
Feb 04 PHP
php中关于长度计算容易混淆的问题分析
May 27 PHP
php版微信小店调用api示例代码
Nov 12 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
PHP7下协程的实现方法详解
Dec 17 PHP
PHP代码重构方法漫谈
Apr 17 PHP
PHP面向对象类型约束用法分析
Jun 12 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
Aug 03 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
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
jquery获取input的value问题说明
2010/08/19 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
2016/12/08 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
redux中间件之redux-thunk的具体使用
2018/04/17 Javascript
js正则相关知识点专题
2018/05/10 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
Python实现进程同步和通信的方法
2018/01/02 Python
Pytorch入门之mnist分类实例
2018/04/14 Python
Python获取指定字符前面的所有字符方法
2018/05/02 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
个人实用简单的自我评价
2013/10/19 职场文书
小学生操行评语大全
2014/04/22 职场文书
绿色环保演讲稿
2014/05/10 职场文书
社区先进事迹材料
2014/05/19 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
简单聊聊Golang中defer预计算参数
2022/03/25 Golang