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来处理多个提交任务
May 08 PHP
php实现的遍历文件夹下所有文件,编辑删除
Jan 05 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
php文件夹与文件目录操作函数介绍
Sep 09 PHP
用php简单实现加减乘除计算器
Jan 06 PHP
php实现水仙花数示例分享
Apr 03 PHP
php实现批量压缩图片文件大小的脚本
Jul 04 PHP
PHP处理数组和XML之间的互相转换
Jun 02 PHP
php基于websocket搭建简易聊天室实践
Oct 24 PHP
php array_values 返回数组的所有值详解及实例
Nov 12 PHP
Yii框架分页实现方法详解
May 20 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
Aug 03 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下过滤HTML代码的函数
2007/12/10 PHP
php操作mongoDB实例分析
2014/12/29 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
javascript 清除输入框中的数据
2009/04/13 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
Python部署web开发程序的几种方法
2017/05/05 Python
python实现简单登陆流程的方法
2018/04/22 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
委托书的写法
2014/09/16 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
2019安全宣传标语大全
2019/08/14 职场文书