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模板引擎SMARTY
Oct 09 PHP
网络资源
Oct 09 PHP
随时给自己贴的图片加文字的php水印
Mar 16 PHP
php SQL之where语句生成器
Mar 24 PHP
PHP中break及continue两个流程控制指令区别分析
Apr 18 PHP
php连接Access数据库错误及解决方法
Jun 20 PHP
关于js与php互相传值的介绍
Jun 25 PHP
CodeIgniter模板引擎使用实例
Jul 15 PHP
PHP扩展开发入门教程
Feb 26 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
详解PHP中的mb_detect_encoding函数使用方法
Aug 18 PHP
制作个性化的WordPress登陆界面的实例教程
May 21 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
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
PHP获取当前系统时间的方法小结
2018/10/03 PHP
php测试kafka项目示例
2020/02/06 PHP
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
2016/11/30 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
2018/12/09 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
基于python编写的微博应用
2014/10/17 Python
python中os操作文件及文件路径实例汇总
2015/01/15 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
python中requests和https使用简单示例
2018/01/18 Python
python 实现登录网页的操作方法
2018/05/11 Python
python plotly绘制直方图实例详解
2019/07/22 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
大学生创业感言
2014/01/25 职场文书
美术课外活动总结
2014/07/08 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
扬州个园导游词
2015/02/06 职场文书
感恩主题班会教案
2015/08/12 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书