@ronaldoooo
2014-08-19T07:14:19.000000Z
字数 2478
阅读 1733
class Page{
$source;//页面的源地址
$content;//页面读取后的内容
$results;//页面执行抓取后的结果,应该是一个字典型数组(关联数组)
private $pageReader;
private $pageParser;
//读页面,根据$source读取页面,将页面内容缓存在$content中
function in(){...}
//抓取方法,调用$pageReader->catch()
function catch(){
$pageReader->catch($this);
}
//转化方法,调用$pageParser->parse()
function parse(){
$pageParser($this);
}
//存储方法,会采用PathCalculator计算存储位置,写入时会调用模板生成静态HTML
function out(){
$pc = PathCalculator::calculate($source);
}
}
抓取模块负责页面的抓取。
class PageReader{
//抓取器
//每一个抓取器包含一个抓取元列表。
//会为每个页面升恒一个抓取器
$catchers;//抓取元的列表,是一个array。在执行抓取时,依次从列表中取出抓取元。一个抓取元对应一条抓取规则。
//依照catchers抓取页面
function catch($page){
foreach($catchers as $catcher){
$catcher->catch($page->content);
$page->results[$catcher->key] = $catcher->value;
}
}
//工具成员方法:
function addCatcher(Catcher $c){...}//增加一个抓取器
function removeCatcher(Catcher $c){...}//移除一个抓取器
//getter and setter...
}
class Catcher{
//抓取元
//每一个抓取元对应一个小的抓取规则,如:抓取title,content等。
$key;//抓取的键值
$regex;//键值需要匹配的正则表达式
$value;//抓取出的结果
//匹配正则表达式,依照$key的值将结果存放在$value中
function catch($content){...}
}
负责内容的转化,工作包含两项:
原本的设计中,转换模块只负责页面的转换,而存放工作由存放模块来完成。但是考虑到存放并不需要很好的拓展性,且功能较为单一,故由数据类Page自身来完成存放的逻辑。
class PageParser{
//转换器
//转换器和抓取器类似,它包含一个转换规则的列表,转换规则可以动态的添加。
//会为每个页面生成一个转换器
$filters;//过滤元的列表。在执行过滤时,依照列表中地每一项进行过滤。
//遍历页面中抓取出的所有元素,逐一进行过滤。
function filter($page){
while(list($key, $value) = each($page->results)){
$page->results[$key] = filterText($value);
}
}
//工具方法,对单一的内容进行过滤。会逐一调用所有的过滤元。
function filterText($value){
foreach($filters as $filter){
$value = $filter->filter($value);
}
return $value;
}
}
class Filter{
//过滤元
//根据传入的字串,依照自身的规则和字串内容来doSomething
function filter($text){
//.....anything you want to do
//转换图片,转换URL代码都在此完成。推荐继承此类,实现不同的filter,加入到PageParser的filters列表中。
}
}
一些通用的方法,该模块中的类作为工具被其它类调用。
路径计算器,工具类。
class Toolbox{
//工具类
//所有的通用方法都放置在该类中,以静态形式存在
public static function calculate($url){
//....some logic here
return $directory;
}
......
}
模板负责将数据呈现出来。
模板的生成逻辑在Page类中的out方法中完成。
该页面是整个模板框架的基础页面,所有的页面都从此页面继承。
页面元素:
首页是用户在手机端输入cnhubei.com
后跳转到的页面。
页面元素:
目录页是当点击了某一个频道后,会在页面中显示该频道下的文章列表。
页面元素:
文章页是用户在点击一篇文章的标题后出现的页面,主要用于显示文章内容。
内容包含标题、编辑、作者等一系列采集到的,并经过处理的信息。