前言

闲来无事,利用课余的时间完成的采集脚本,实现了采集月光博客所有公开文章并分别以文本文档进行另存为,代码量虽少但做到了利用最大化,此方法还是以正则为中心,利用while与foreach的循环遍历操作进行实现。

实现思路:自增pageID,使用while进行循环GET拼接PageID后的URL,循环内部取得整个页面的字符串后利用正则提取出单Page页所有博文的文章URL与标题,再次以foreach循环遍历结果集,循环内部对遍历出来的URL再次GET后对返回结果进行正则匹配目的就是提取出文章的内容(一个标题对应一篇文章,因此不用担心在遍历循环的时候出现逻辑上的错误),万事俱备只欠东风,拼接路径依次写入。

warning:此次采集只为用作学习交流,采集得到的文章不会进行二次修改发布,更不会用于商业。文章著作权归原PO持有,采集方案归本人所有,转载请注明出处。

code


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

最终效果


一介布衣