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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
php之对抗Web扫描器的脚本技巧
Oct 01 PHP
php 将excel导入mysql
Nov 09 PHP
php实现的zip文件内容比较类
Sep 24 PHP
php无限极分类递归排序实现方法
Nov 11 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
Dec 18 PHP
php实现遍历目录并删除指定文件中指定内容
Jan 21 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
Dec 07 PHP
[原创]php实现子字符串位置相互对调互换的方法
Jun 02 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
Oct 14 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
Dec 31 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
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
Javascript浅谈之this
2013/12/17 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
Python的Tornado框架异步编程入门实例
2015/04/24 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
2013/01/23 HTML / CSS
HTML5进阶段内联标签汇总(小篇)
2016/07/13 HTML / CSS
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
英国网上花店:Bunches
2016/11/29 全球购物
师范毕业生自我鉴定
2014/01/15 职场文书
集体备课反思
2014/02/12 职场文书
党员服务承诺书
2014/05/28 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫