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和ACCESS写聊天室(六)
Oct 09 PHP
PHP文件操作实现代码分享
Sep 01 PHP
解析htaccess伪静态的规则
Jun 18 PHP
PHP zip扩展Linux下安装过程分享
May 05 PHP
php简单实现多语言切换的方法
May 09 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 PHP
php解决安全问题的方法实例
Sep 19 PHP
Thinkphp5.0框架视图view的模板布局用法分析
Oct 12 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
Oct 18 PHP
PHP实现笛卡尔积算法的实例讲解
Dec 22 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
德生S2000电路分析
2021/03/02 无线电
php cookie使用方法学习笔记分享
2013/11/07 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
javascript new一个对象的实质
2010/01/07 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
js传参数受特殊字符影响错误的解决方法
2013/10/21 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
JavaScript实现网页截图功能
2014/10/16 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
讲解Python中的递归函数
2015/04/27 Python
Python实现学生成绩管理系统
2020/04/05 Python
python字符串的方法与操作大全
2018/01/30 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
Python3实现zip分卷压缩过程解析
2019/10/09 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
大学生就业自荐信
2013/10/26 职场文书
微信营销策划方案
2014/02/24 职场文书
原告代理词范文
2015/05/25 职场文书
小学生手册家长意见
2015/06/03 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python