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 相关文章推荐
如何将数据从文本导入到mysql
Oct 09 PHP
基于php-fpm 参数的深入理解
Jun 03 PHP
如何设置mysql允许外网访问
Jun 04 PHP
使用YUI+Ant 实现JS CSS压缩
Sep 02 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
thinkPHP2.1自定义标签库的导入方法详解
Jul 20 PHP
利用PHP生成CSV文件简单示例
Dec 21 PHP
php使用PDO执行SQL语句的方法分析
Feb 16 PHP
PHP使用PDO操作sqlite数据库应用案例
Mar 07 PHP
php7新特性的理解和比较总结
Apr 14 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 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
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
2019/12/02 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
JS解密入门之凭直觉解
2008/06/25 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
javascript 闭包详解
2015/07/02 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
js 定义对象数组(结合)多维数组方法
2016/07/27 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
angular多语言配置详解
2019/05/16 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
Python使用gensim计算文档相似性
2016/04/10 Python
浅析python中的分片与截断序列
2016/08/09 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
英国家用电器购物网站:Hughes
2018/02/23 全球购物
美国打印机墨水和碳粉购物网站:QuikShip Toner
2018/08/29 全球购物
UNIX文件系统分类
2014/11/11 面试题
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
委托公证书
2014/04/08 职场文书
科技活动周标语
2014/10/08 职场文书
美丽的大脚观后感
2015/06/03 职场文书
学生病假条范文
2015/08/17 职场文书
爱国之歌(8首)
2019/09/29 职场文书
详解Python flask的前后端交互
2022/03/31 Python