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数组应用之比较两个时间的相减排序
Aug 18 PHP
php 处理上百万条的数据库如何提高处理查询速度
Feb 08 PHP
用PHP实现递归循环每一个目录
Aug 08 PHP
利用谷歌 Translate API制作自己的翻译脚本
Jun 04 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
ThinkPHP上使用多说评论插件的方法
Oct 31 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
Nov 04 PHP
PHP数学运算与数据处理实例分析
Apr 01 PHP
解决yii2左侧菜单子级无法高亮问题的方法
May 08 PHP
PHP中Socket连接及读写数据超时问题分析
Jul 19 PHP
PHP用continue跳过本次循环中剩余代码的注意点
Jun 27 PHP
php中各种定义变量的方法小结
Oct 18 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函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
用jscript启动sqlserver
2007/06/21 Javascript
学习ExtJS Window常用方法
2009/10/07 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
JS实现随机生成10个手机号的方法示例
2018/12/07 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
微信小程序实现多行文字超出部分省略号显示功能
2019/10/23 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
python和C语言混合编程实例
2014/06/04 Python
Python函数式编程指南(二):从函数开始
2015/06/24 Python
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
Python 搭建Web站点之Web服务器网关接口
2016/11/06 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
Python3如何判断三角形的类型
2020/04/12 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
高一自我鉴定
2013/12/17 职场文书
优秀德育工作者事迹材料
2014/05/07 职场文书
2014教师研修学习体会
2014/07/08 职场文书
党员十八大心得体会
2014/09/12 职场文书
会议通知范文
2015/04/15 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
订货会主持词
2015/07/01 职场文书
国家助学金受助感言
2015/08/01 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书
opencv检测动态物体的实现
2021/07/21 Python
LeetCode189轮转数组python示例
2022/08/05 Python