记录学习与后端知识并分享学习代码过程(会飞的鱼Blog)

php通过正则提取页面相关信息

会飞的鱼 0 893 2023年2月8日

1、获取页面标题

//提取标题
preg_match('/<title>(?<title>.*?)<\/title>/i', $html, $titleArr);
$title = $titleArr['title'];

2、获取body主体内容,并将背景图片提取出来替换成其他图片地址

/**
 * 获取BODY主体区域内容
 * @param $html
 * @param $urlRoot
 * @return mixed
 */
function getBody($html,$urlRoot = null){
    //提取BODY主体
    preg_match('/<!--body-->(.*?)<!--body-->/is ', $html, $bodyArr);
    if(!$bodyArr){
        preg_match('/<body.*?>(.*?)<\/body>/is ', $html, $bodyArr);
    }
    $body = $bodyArr[1];
    //替换img文件
    $body =  preg_replace('/(<[img|IMG].*src=[\'|"])(\.\.\/)*(img.[^\'||^"]+)/',"$1$urlRoot$3",$body);
    //替换html文件内的css背景图片
    $body =  preg_replace('~\b(background(-image)?\s*:(.*?)\(\s*[\'|"]?)(\.\.\/)*(img.*?)?\s*\)~i',"$1$urlRoot$5)",$body);
    return $body;
}

3、提取页面Description内容

function getDescription($html){
    // Get the 'content' attribute value in a <meta name="description" ... />
    $matches = array();

    // Search for <meta name="description" content="Buy my stuff" />
    preg_match('/<meta.*?name=("|\')description("|\').*?content=("|\')(.*?)("|\')/i', $html, $matches);
    if (count($matches) > 4) {
        return trim($matches[4]);
    }

    // Order of attributes could be swapped around: <meta content="Buy my stuff" name="description" />
    preg_match('/<meta.*?content=("|\')(.*?)("|\').*?name=("|\')description("|\')/i', $html, $matches);
    if (count($matches) > 2) {
        return trim($matches[2]);
    }

    // No match
    return null;
}

4、替换css文件的背景图片地址

/**
 * 获取CSS内容
 * @param $cssCnt
 * @param $urlRoot
 * @return mixed
 */
function getCss($cssCnt,$urlRoot =null){
    //匹配包含 img文件夹的相对路径图片 (含义绝对路径的不包含在其中)
    //匹配替换不一定准确,因为只是将 含义 ../ 的地址转为url 而没有考虑 ../../ 之类的层级关系
    $css =  preg_replace('~\b(background(-image)?\s*:(.*?)\(\s*[\'|"]?)(\.\.\/)*(img.*?)?\s*\)~i',"$1$urlRoot$5)",$cssCnt);
    //添加css前缀
    $css =  preg_replace('/\b.(.*?)[,|{]/',"pat .$0",$cssCnt);
    //TODO 压缩css
    return $css;
}
本文由 @会飞的鱼 于 2023-2-8 发布在 会飞的鱼Blog,如无特别说明,本博文章均为原创,转载请保留出处。

网友评论

    暂无评论

会飞的鱼 在线咨询

在线时间:9:00-22:00
周六、周日:14:00-22:00