做为一个仿站工作者,当遇到网站有版权时甚至加密的时候,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
|
<?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/>" ; } ?> |
然后没有意外的话,你会发现,你指定的文件夹下面已经满满的都是图片了,哈哈..
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源码批量抓取远程网页图片并保存到本地的实现方法,希望大家喜欢。