Pages

Saturday, 31 October 2015

一段php代码轻松实现月光博客的整站数据扒取

采集脚本,实现了采集月光博客所有公开文章并分别以文本文档进行另存为,代码量虽少但做到了利用最大化,此方法还是以正则为中心,利用while与foreach的循环遍历操作进行实现。
实现思路:自增pageID,使用while进行循环GET拼接PageID后的URL,循环内部取得整个页面的字符串后利用正则提取出单Page页所有博文的文章URL与标题,再次以foreach循环遍历结果集,循环内部对遍历出来的URL再次GET后对返回结果进行正则匹配目的就是提取出文章的内容(一个标题对应一篇文章,因此不用担心在遍历循环的时候出现逻辑上的错误),万事俱备只欠东风,拼接路径依次写入。

<?php
    header("content-type:text/html;charset=urf-8");
    ini_set('max_execution_time''0');
    $page = 1;
    while($str file_get_contents('http://www.williamlong.info/cat/?page=' $page)){
        $preg '#<h2sclass=".*?"><ashref="(.*?)"srel=".*?">(.*?)</a></h2>#';
        $result = preg_match_all($preg,$str,$arr);
        if($result){
            foreach($arr[2] as $key=>$value){
                $content file_get_contents($arr[1][$key]);
                $preg '#<divsid="artibody">(.*?)<psstyle="display:none;"sclass="cloudreamHelperLink"scodetype="post"sentryid="d+"></p></div>#';
                preg_match($preg,$content,$newc);
                if(!file_exists('./williamlong/html/')) mkdir('./williamlong/html/',0777,true);
                file_put_contents(iconv("utf-8","gb2312","./williamlong/{$value}.txt"),$newc[1]);
                file_put_contents(iconv("utf-8","gb2312","./williamlong/html/{$value}.html"),$content);
            }
            $page++;
        }else{
            echo '匹配失败';
            return false;
        }
    }
?>