采集脚本,实现了采集月光博客所有公开文章并分别以文本文档进行另存为,代码量虽少但做到了利用最大化,此方法还是以正则为中心,利用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; $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; } }?>