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


<?php


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;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值