首页 > 后端开发 > php教程 > 分享PHP源码批量抓取远程网页图片并保存到本地的实现方法_PHP

分享PHP源码批量抓取远程网页图片并保存到本地的实现方法_PHP

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-05-29 11:47:52
原创
1541 人浏览过

做为一个仿站工作者,当遇到网站有版权时甚至加密的时候,WEBZIP也熄火,怎么扣取网页上的图片和背景图片呢。有时候,可能会想到用火狐,这款浏览器好像一个强大的BUG,文章有版权,屏蔽右键,火狐丝毫也不会被影响。

但是作为一个热爱php的开发者来说,更多的是喜欢自己动手。所以,我就写出了下面的一个源码,php远程抓取图片小程序。可以读取css文件并抓取css代码中的背景图片,下面这段代码也是针对抓取css中图片而编写的。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

<&#63;php

 header("Content-Type: text/html; charset=utf-8");

    error_reporting(E_ERROR|E_WARNING);

 //全局配置

 $fromFile = "aaa.css"//要抓取的文件

 $savePath = "ttttttttt"//保存路径

 $fromDomain = "http://www.xxx.com/"; //要抓取的域名

 //读取css样式并且分离出所有image的url

 $str = file_get_contents($fromFile);

 $strArr = explode("url(",$str);

 $i = 0;

 foreach($strArr as $val){

 $val1 = explode(")",$val);

 if(strpos($val1[0],'jpg')||strpos($val1[0],'png')||strpos($val1[0],'gif'))

 $imgUrl[$i++] = $val1[0];

 }

    //PS:上面可以用正则的,但是我觉得这样也不错

 //开始抓取

 foreach($imgUrl as $url){

 if($url=="") continue;

 $filename = $savePath.$url;

 $url = $fromDomain.$url;

 getImage($url,$filename);

 }

 function getImage($url,$filename){

 ob_start();

 $context = stream_context_create(

       array (

     'http' => array (

      'follow_location' => false // don't follow redirects

      )

     )

 );

 //请确保php.ini中的fopen wrappers已经激活

 readfile( $url,false,$context);

 $img = ob_get_contents();

        ob_end_clean();

 $fp2 = @fopen($filename,"a");

 fwrite($fp2,$img);

 fclose($fp2);

 echo $filename." ok √<br/>";

 }

&#63;>

登录后复制

然后没有意外的话,你会发现,你指定的文件夹下面已经满满的都是图片了,哈哈..

ps:php获取远程图片并下载保存到本地

分享一个利用php获取远程图片并将远程图片下载保存到本地的函数代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

/*

*功能:php完美实现下载远程图片保存到本地

*参数:文件url,保存文件目录,保存文件名称,使用的下载方式

*当保存文件名称为空时则使用远程文件原来的名称

*/

function getImage($url,$save_dir='',$filename='',$type=0){

  if(trim($url)==''){

    return array('file_name'=>'','save_path'=>'','error'=>1);

  }

  if(trim($save_dir)==''){

    $save_dir='./';

  }

  if(trim($filename)==''){//保存文件名

    $ext=strrchr($url,'.');

    if($ext!='.gif'&&$ext!='.jpg'){

      return array('file_name'=>'','save_path'=>'','error'=>3);

    }

    $filename=time().$ext;

  }

  if(0!==strrpos($save_dir,'/')){

    $save_dir.='/';

  }

  //创建保存目录

  if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){

    return array('file_name'=>'','save_path'=>'','error'=>5);

  }

  //获取远程文件所采用的方法

  if($type){

    $ch=curl_init();

    $timeout=5;

    curl_setopt($ch,CURLOPT_URL,$url);

    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);

    $img=curl_exec($ch);

    curl_close($ch);

  }else{

    ob_start();

    readfile($url);

    $img=ob_get_contents();

    ob_end_clean();

  }

  //$size=strlen($img);

  //文件大小

  $fp2=@fopen($save_dir.$filename,'a');

  fwrite($fp2,$img);

  fclose($fp2);

  unset($img,$url);

  return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0);

}

登录后复制

以上内容是小编给大家分享的PHP源码批量抓取远程网页图片并保存到本地的实现方法,希望大家喜欢。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板