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 开发工具
Dec 06 PHP
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
Aug 19 PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
php格式化日期和时间格式化示例分享
Feb 24 PHP
ThinkPHP中where()使用方法详解
Apr 19 PHP
深入浅析PHP无限极分类的案例教程
May 09 PHP
php blowfish加密解密算法
Jul 02 PHP
php session的应用详细介绍
Mar 22 PHP
php图像验证码生成代码
Jun 08 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
Jul 26 PHP
laravel 多图上传及图片的存储例子
Oct 14 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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
PHP5 的对象赋值机制介绍
2011/08/02 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
JavaScript数据类型之基本类型和引用类型的值
2015/04/01 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
浅谈React之状态(State)
2018/09/19 Javascript
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
Python中利用aiohttp制作异步爬虫及简单应用
2018/11/29 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
python机器学习库scikit-learn:SVR的基本应用
2019/06/26 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
办护照工作证明范本
2014/01/14 职场文书
毕业生自荐书
2014/02/03 职场文书
岗位廉洁从政承诺书
2014/03/27 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
钳工实训报告总结
2014/11/04 职场文书
爱情保证书
2015/01/17 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书
Python借助with语句实现代码段只执行有限次
2022/03/23 Python