您的位置:首页 > 运维架构 > 网站架构

PHP抓取网站页面、CSS文件、图片

2013-02-26 10:41 363 查看
<?php

$url = array(

'index' => 'http://www.meilishuo.com/welcome',

'login' => 'http://www.meilishuo.com/user/login',

'register' => 'http://www.meilishuo.com/user/register'

);

getHtml($url);
/*

获取网站源代码

$url is array 需要抓取的页面

getCss() 获取网站CSS文件

getImgs() 获取网站图片

*/

function getHtml($url)

{

foreach($url as $key=>$value){

$result = file_get_contents($value);

file_put_contents($key.'.html', $result);

getCss($result, $key);

getImgs($result, $key);

}

}
/*

获取网站页面图片

$fileName 本地页面地址

$first is array 查找的条件

$two is array 替换的内容

$data is string 页面内容图片被替换成本地图片

*/

function getImgs($result,$fileName)

{

$imgRegex = '/<img.+?src=\"(.+?)\".*?>/';

preg_match_all($imgRegex, $result, $imgResult);

$result = file_get_contents($fileName.'.html');
foreach($imgResult[1] as $key=>$value){
$imgPath = $value;

$arr =explode('/',$value);

unset($arr[0]);

unset($arr[1]);

unset($arr[2]);

$arrStr = implode('/',$arr);

$imgResult[1][$key] = $arrStr;

$first[] = $value;

$two[] = $arrStr;

$fileArr = pathinfo($imgResult[1][$key]);
$imgArr = array('jpg', 'png');

if(in_array($fileArr['extension'], $imgArr)){

//var_dump($fileArr);

@makeDir($fileArr['dirname']);

if(!is_file($fileArr['dirname'].'/'.$fileArr['basename'])){

@copy($imgPath, $fileArr['dirname'].'/'.$fileArr['basename']);

}

}

}

$data = str_replace($first, $two, $result);

file_put_contents($fileName.'.html', $data);

}

/*

获取CSS代码

getImg($value) 获取CSS 文件中的图片 $value CSS 路径

$fileResult 本地保存文件名称

$dirPath 目录路径 不包含文件名称

*/

function getCss($result,$fileName)

{

//$regex = '/<link rel="stylesheet" type="text\/css" href="\S" \/>/';

$regex = '/<link.+?href=\"(.+?)\".*?>/';

preg_match_all($regex, $result, $cssResult);
foreach($cssResult[1] as $value){

$fileResult = file_get_contents($fileName.".html");

if(strpos($value,"?")){

$cssPath = substr($value, 0, strrpos($value, "?"));

}else{

$cssPath = $value;

}
$arr =explode('/',$value);

unset($arr[0]);

unset($arr[1]);

unset($arr[2]);

$arrStr = implode('/',$arr);
$arr1 = explode('?',$arrStr);
$dirPath = substr($arr1[0], 0, strrpos($arr1[0],'/'));

makeDir($dirPath);

$fileArr = pathinfo($cssPath);
$newContent = str_replace($value, $arrStr, $fileResult);

//echo htmlspecialchars($newContent);exit;
file_put_contents($fileName.'.html', $newContent);
if($fileArr['extension'] == 'css'){

$css = file_get_contents($value);

file_put_contents($arr1[0], $css);

getImg($value,$arr1[0]);

}

}

}
/*

获取CSS文件图片

makeDir() 递归创建文件夹

$filePath 图片路径

$dirPath 图片所在目录路径 不包含文件名

*/

function getImg($cssPath,$bCssPath)

{

$data = file_get_contents($cssPath);
$regex = '/url\(\'{0,1}\"{0,1}(.*?)\'{0,1}\"{0,1}\)/';

preg_match_all($regex,$data,$result);

//var_dump($result);

foreach($result[1] as $value){

$length = strlen("http://i.meilishuo.net");

$filePath = trim(substr($value, $length),'/');

$dirPath = substr($filePath, 0, strrpos($filePath, '/'));

$first[] = $value;

$two[] = $filePath;

makeDir($dirPath);

if(!is_file($filePath)){

@copy($value, $filePath);

}

//var_dump($fileArr);

}

$newContent = str_replace($first, $two, $data);

file_put_contents($bCssPath,$newContent);
}
/*

递归创建文件

$pathString 目录路径 不包含文件名

*/

function makeDir($pathString)

{

$pathArray = explode('/', $pathString);

$tmpPath = array_shift($pathArray);

if(!is_dir($tmpPath)){

@mkdir($tmpPath);

}

foreach ($pathArray as $val){

$tmpPath .= "/".$val;

if(is_dir($tmpPath)){

continue;

} else {

@mkdir($tmpPath, 0777);

}

}

if(is_dir($tmpPath)){

return $tmpPath;

} else{

return false;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: