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数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
PHP 透明水印生成代码
Aug 27 PHP
php类中private属性继承问题分析
Nov 01 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
PHP @ at 记号的作用示例介绍
Oct 10 PHP
PHP Yii框架之表单验证规则大全
Nov 16 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
Jul 21 PHP
thinkPHP引入类的方法详解
Dec 08 PHP
Thinkphp5.0自动生成模块及目录的方法详解
Apr 17 PHP
php删除二维数组中的重复值方法
Mar 12 PHP
php对象工厂类完整示例
Aug 09 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
Dec 12 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数组循环操作详细介绍 附实例代码
2013/02/03 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
ES6基础之默认参数值
2019/02/21 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python实现处理管道的方法
2015/06/04 Python
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
在python的类中动态添加属性与生成对象
2016/09/17 Python
python 迭代器和iter()函数详解及实例
2017/03/21 Python
python opencv读mp4视频的实例
2018/12/07 Python
Django 中自定义 Admin 样式与功能的实现方法
2019/07/04 Python
python绘制随机网络图形示例
2019/11/21 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
如何基于Python实现数字类型转换
2020/02/07 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
美国知名生活购物网站:Goop
2017/11/03 全球购物
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
土地转让协议书
2014/04/15 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android
Java 定时任务技术趋势简介
2022/05/04 Java/Android
使用Apache Camel表达REST服务的方法
2022/06/10 Servers
postgresql中如何执行sql文件
2023/05/08 PostgreSQL