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 和 HTML
Oct 09 PHP
PHP 一个页面执行时间类代码
Mar 05 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
Nov 07 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
Sep 23 PHP
php使用pack处理二进制文件的方法
Jul 03 PHP
php字符串函数学习之strstr()
Mar 27 PHP
PHP二进制与字符串之间的相互转换教程
Oct 14 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
php PDO属性设置与操作方法分析
Dec 27 PHP
在PHP中输出JS语句以及乱码问题的解决方案
Feb 13 PHP
PHP实现数据四舍五入的方法小结【4种方法】
Mar 27 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 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
php对称加密算法示例
2014/05/07 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
python3.7 sys模块的具体使用
2019/07/22 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
pandas 对group进行聚合的例子
2019/12/27 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
python PIL模块的基本使用
2020/09/29 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
小学生自我鉴定
2013/10/12 职场文书
双十佳事迹材料
2014/01/29 职场文书
正风肃纪剖析材料
2014/02/18 职场文书
初中教师个人总结
2015/02/10 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
中学教师教学工作总结
2015/08/13 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang