内容自动采集器模块的数据库设计目的是满足两个需求:一个是规则存储表(spiders)存储采集规则、采集源URL地址、栏目分类;另一个是采集内容表(articles)用来存储采集到的数据。
1. 规则存储表设计
规则存储表(spiders)是内容采集模块的核心,它由两个功能部分组成,一部分是存储采集规则(页面网址提取规则、页面内容提取规则);另一部分是辅助功能(栏目名称、已采集数、栏目分类标识)。了解清楚功能划分之后,下面来看具体的设计步骤。
(1)建立get_content数据库,SQL语句如下:
CREATE DATABASE 'get_content';
(2)在get_content数据库中建立一个命名为spiders的“规则存储表”,结构如表8.1所示。创建表及相关字段的SQL语句如下:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- 数据库: `get_content` -- -- -------------------------------------------------------- -- -- 表的结构 `spiders` -- CREATE TABLE `spiders` ( `ID` int(10) unsigned NOT NULL auto_increment, `Title` varchar(200) NOT NULL, `ListPreg` mediumtext NOT NULL, `ContentPreg` mediumtext NOT NULL, `Count` int(10) unsigned NOT NULL default '0', `EnterUrl` varchar(200) NOT NULL, `Category` smallint(5) unsigned NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
表 1.1规则存储表
字 段 | 数据类型 | 长 度 | NULL | 默认值 | 字段说明 |
ID | int | 10 | 否 | auto _increment | 自增主键 |
Title | varchar | 200 | 栏目名称 | ||
ListPreg | mediumtext | 页面网址提取规则 | |||
ContentPreg | mediumtext | 页面内容提取规则 | |||
Count | int | 10 | 否 | 已采集数 | |
EnterUrl | varchar | 200 | 采集源 URL 地址 | ||
Category | smallint | 5 | 分类标识 |
注意:以上字段是一个采集规则表的基础,根据业务的扩展可以添加用于标识VIP会员的vip字段等。
2. 采集内容表设计
采集内容表(articles)的作用是存储采集到的数据,从命名就可以看出它的设计和一般文章内容表有很多相似的地方。这部分的数据库设计相对更简单些,只有一个“采集内容表”,它被用来记录采集到的文件的详细信息,同时可以提供查询。但是这类表的设计在其他项目中也很常见,适用于多种业务模型。读者在理解含义的基础上可以做适当的扩展,使之适用于更多的业务模型。
在get_content()数据库中建立一个命名为articles的“采集内容表”,如表8.2所示。创建表及相关字段SQL语句如下:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- 数据库: `get_content` -- -- -------------------------------------------------------- -- -- 表的结构 `articles` -- CREATE TABLE `articles` ( `ID` int(10) unsigned NOT NULL auto_increment, `Title` varchar(200) NOT NULL, `Click` int(11) NOT NULL, `Content` longtext, `Date` date NOT NULL, `Category` smallint(6) NOT NULL, PRIMARY KEY (`ID`), KEY `Category` (`Category`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=159 ;
表 8.2采集内容表
字 段 | 数据类型 | 长 度 | NULL | 默认值 | 字段说明 |
ID | int | 11 | 否 | 自增主键 | |
Title | varchar | 200 | 否 | 无 | 文章标题 |
Click | int | 11 | 否 | 无 | 文章内容中包含的链接 |
Content | longtext | 否 | 无 | 记录页面内容 | |
Date | date | 否 | 无 | 采集日期 | |
Category | smallint | 6 | 否 | 栏目分类标识 |