做为一个仿站工作者,当遇到网站有版权时甚至加密的时候,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源码批量抓取远程网页图片并保存到本地的实现方法,希望大家喜欢。