网络爬虫系统详细设计说明书V0.2.1.doc
- 文档编号:30579158
- 上传时间:2023-08-17
- 格式:DOC
- 页数:68
- 大小:1.61MB
网络爬虫系统详细设计说明书V0.2.1.doc
《网络爬虫系统详细设计说明书V0.2.1.doc》由会员分享,可在线阅读,更多相关《网络爬虫系统详细设计说明书V0.2.1.doc(68页珍藏版)》请在冰豆网上搜索。
深圳移动数据业务分析挖掘项目详细设计
网络爬虫系统
详细设计说明书
用户单位:
承建单位:
广州星博信息技术有限公司
修订记录
版本
日期
修订标记
修订者
说明
V0.1
2010-7-23
A
陈跃群
草拟
V0.2
2010-8-3
M
陈跃群
添加“模块关系图”,“模块描述”,修改部分类图,修改序列图
V0.2.1
2010-8-3
M
陈跃群
修改“common模块时序图”,修改部分编号
注:
A-添加,M-修改,D-删除,C-审核
广州星博 第66页共63页
目录
第1章 引言 4
1.1 目的 4
1.2 参考资料 4
第2章 系统概述 5
2.1 模块关系图 5
2.1.1 网页分类子系统 5
2.1.2 二级域名子系统 8
第3章 COMMON模块 10
3.1 模块描述 10
3.2 模块类图 10
3.3 模块序列图 11
3.4 重要类和接口描述 12
第4章 生成种子子系统 15
4.1 模块描述 15
4.2 模块类图 16
4.3 模块序列图 17
4.4 重要类和接口描述 18
第5章 网页数据采集子系统 21
5.1 Http访问组件模块 21
5.1.1 模块描述 21
5.1.2 模块类图 22
5.1.3 模块序列图 23
5.1.4 重要类和接口描述 23
5.2 网页采集URLs/ContentType过滤器、分类器模块 26
5.2.1 模块描述 26
5.2.2 模块类图 27
5.2.3 模块序列图 27
5.2.4 重要类和接口描述 28
5.3 网页采集DB接口模块 32
5.3.1 模块描述 32
5.3.2 模块类图 32
5.3.3 模块序列图 33
5.3.4 重要类和接口描述 33
5.4 链接抽取逻辑模块 34
5.4.1 网页数据生成子模块 34
5.4.2 网页链接抽取子模块 37
5.4.3 网页链接过滤子模块 40
第6章 预处理子系统 44
6.1 分词模块并建立正向索引模块 44
6.1.1 模块描述 44
6.1.2 模块类图 45
6.1.3 模块序列图 46
6.1.4 重要类和接口描述 46
第7章 归类子系统 49
7.1 训练分类器模块 49
7.1.1 模块描述 49
7.1.2 模块类图 49
7.1.3 模块序列图 50
7.1.4 重要类和接口描述 50
7.2 分类模块 52
7.2.1 模块描述 52
7.2.2 模块类图 53
7.2.3 模块序列图 54
7.2.4 重要类和接口描述 55
第8章 导出子系统 59
8.1 导出到规则库 59
8.1.1 业务类型导出到规则库 59
8.1.2 归类列表导出到规则库 59
第9章 二级域名的网页采集 60
9.1 二级域名Http访问模块 60
9.1.1 模块描述 60
9.1.2 模块类图 61
9.1.3 模块序列图 62
9.1.4 重要类和接口描述 62
第10章 二级域名预处理 65
10.1 二级域名建立正向索引 65
10.1.1 模块描述 65
10.1.2 模块类图 65
10.1.3 模块序列图 66
10.1.4 重要类和接口描述 66
第1章引言
1.1目的
本说明书的编写目的是为了向用户单位、承建单位的相关人员说明系统总体设计的技术方案,从程序系统的设计角度出发,考虑系统中的整体架构、处理流程、模块划分、功能分配、接口设计、运行环境、数据结构设计和出错处理设计等内容,以向整个设计期提供关于程序系统的逻辑和数据功能实现方式的总体描述,从而作为程序详细设计或编码的基础。
设计阶段将以本文档为核心文档。
本概要设计说明书的适用读者为:
客户代表、业务分析人员、系统架构师、系统开发人员、测试人员。
1.2参考资料
序号
文档名称
作者
版本/日期
1
网络爬虫概要设计说明书
广州星博
V0.4
第2章系统概述
系统主要是实现对网络中的某个或某几个入口链接进行数据的采集,并按照主题对所采集的URL进行索引及归类,与移动GPRS/TD用户所访问URL进行匹配,从而发掘用户的潜在需求,以及供用户按照关键字检索网络媒体介质和匹配URLs的主题分类等功能。
(具体见“网络爬虫概要设计说明书”)
2.1模块关系图
2.1.1网页分类子系统
爬虫的一个任务是把(十大)门户网站中的二级目录归类到各个相应主题下面。
把目录划分到对应的主题的过程,在爬虫系统中称为网页分类的过程。
网页分类的过程分为“种子文件生成”、“网页采集”、“预处理”、“分类”等模块,公共模块(common模块)是主线程相关的模块。
网页分类子系统各个模块之间的联系如下图(图2-1)所示。
Øcommon模块:
common模块主要是主线程管理各个业务线程实例的产生、启动、停止、监视等功能;
Ø种子生成模块:
为网页分类服务的种子生成模块读入了既定格式的种子文件,把读到的种子格式化后持久化;该模块和网页采集子系统的接口即为数据库中的链接种子表;
Ø网页采集模块:
网页采集主要是通过WAP/WWW网络,把种子库里的链接内容爬取下来,并把内容持久化,以便供预处理处理;该模块还有一个任务,就是从爬取到的内容中抽取出链接,放到链接种子库中,以便二次采集;该模块和种子生成模块的数据接口是链接种子表,和下一个预处理模块的接口是封装的链接内容(SeedContent)表;
Ø预处理模块:
预处理模块是把采集到的网页内容“分词”、“计算权重”、“建立索引”的过程;它和网页采集的交互是接受网页采集封装的网页链接内容(SeedContent);它和分类模块的接口是为分类模块提供计算了特征向量的“文档”库;
Ø分类模块:
分类是实现网页分类系统的最后也是最重要的一个模块。
分类模块分为“训练样本集”、“链接内容分类”和“二级目录划分”等子模块;大体过程是把需要划分主题的网页内容的文档(下称当前文档)和经过训练的样例文档比较,找出当前文档和样例文档中最相似的一份,把找到的这份样例文档的主题类型作为当前文档的主题类型,形成归类类表;形成归类列表后,切分URL中的目录,分类分级计算目录百分比(此内容请参考《网络爬虫概要设计说明书》之3.4.4)。
该模块需要的数据是人工维护的“类别库”和未经过训练“样例文档集”,预处理产生的“文档库”;中间产生的数据主要是经过训练的“样例文档集”,最后产生的数据是分好主题类别的目录链接库(CatalogLink)。
(图2-1)网页分类子系统描述图
2.1.2二级域名子系统
爬虫的另一个任务是给嗅探数据中用户访问的部分二级域名打上标题。
该过程在爬虫中称为“二级域名子系统”。
二级域名子系统分为“种子生成模块”、“二级域名Http访问模块”和“二级域名建立正向索引”等业务模块,同时也会受common模块管理。
二级域名子系统各个模块之间的联系如下图(图2-2)所示。
Ø种子生成模块:
该模块和网页分类子系统的种子生成模块基本一样;它从嗅探下来的数据库中根据既定的规则筛选出部分二级域名,格式化后存入数据库中,作为种子;该模块和二级域名Http访问模块的接口是链接种子表;
Ø二级域名Http访问模块:
本模块是爬去种子链接的内容,并把内容持久化的过程;它和种子生成模块的交互数据是链接种子库,和二级域名建立正向索引的接口是二级域名链接内容(DomianContent)表;
Ø二级域名建立正向索引:
本模块是给二级域名链接内容抽取标题并持久化的过程。
它和二级域名Http访问模块的接口是二级域名链接内容(DomianContent)表,最终抽取的标题也更新到DomainContent中去。
(图2-2)二级域名子系统描述图
第3章common模块
3.1模块描述
本模块管理着爬虫系统的所有业务活动的线程,实现业务活动线程的启动、停止、状态监控等功能;
Ø输入:
1.配置文件关于各类业务线程相关信息(包括线程数,线程睡眠时间等);
2.用户控制台的命令输入;
Ø输出:
1.各类业务线程的生命活动控制结果;
2.线程状态监控报告;
Ø活动时机:
1.爬虫程序启动时;
2.用户输入命令时;
3.业务线程活动异常时(待扩展);
3.2模块类图
3.3模块序列图
3.4重要类和接口描述
1.主线程
说明
功能描述
主线程组织管理业务线程的类。
通过监视控制台输入的命令,控制业务线程的活动;
主要方法描述
1.run:
按照一定的策略生成各类业务线程,然后等待用户控制台的输入,通过命令管理业务线程的生命活动;
涉及数据
备注
2.InstanceManager
说明
功能描述
InstanceManager线程实例管理类,负责新增线程实例和删去线程实例;
主要方法描述
1.instanceCreate:
根据参数指定的类名称,实例化并把实例引用放入runnerList和threadList列表中;
2.instanceRemove:
根据参数指定的类名,停止该类的一条线程,并从runnerList和threadList删去;该方法先调用IRunner接口的stop方法,然后睡眠预定的时间,然后通过IRunner接口的isEnd()方法检测线程时候正常结束,如果未正常结束则调用Thread的stop方法结束线程,最后从runnerList和threadList列表中删除实例引用;
3.stopAll:
根据参数指定的类名,停止该类的所有线程,并从runnerList和threadList删去;其过程类似于instanceRemove,不同的是本方法停止并删除所有实例;
涉及数据
1.className:
参数指定的线程类名;
2.runnerList:
IRunner接口的列表;
3.threadList:
Thread列表;
备注
各个方法都应该先锁定runnerList,再锁定threadList,一定要按照这个顺序加锁,防止线程死锁;
3.InstanceCreator
说明
功能描述
InstanceCreator为指定的业务线程类增加新线程实例;
主要方法描述
1.InstanceCreator:
构造方法中参数为线程类的类名;
2.run:
线程接口方法,调用InstanceManager的instanceCreate方法生成新线程;
涉及数据
className:
参数指定的线程类名;
runnerList:
IRunner接口的列表;
threadList:
Thread列表;
备注
4.InstanceRemover
说明
功能描述
InstanceRemover停止指定的线程类的一条线程;
主要方法描述
1.InstanceRemover:
扫描目录,读取种子文件内容;
2.run:
线程接口方法,调用InstanceManager的instanceRemove方法除去一条线程实例;
涉及数据
className:
参数指定的线程类名;
runnerList:
IRunner接口的列表;
threadList:
Thread列表;
备注
5.InstanceAllRemover
说明
功能描述
InstanceAllRemover停止指定的线程类的所有线程;
主要方法描述
1.InstanceAllRemover:
扫描目录,读取种子文件内容;
2.run:
线程接口方法,调用InstanceManager的instanceRemove方法除去一条线程实例;
涉及数据
className:
参数指定的线程类名;
runnerList:
IRunner接口的列表;
threadList:
Thread列表;
备注
6.ThreadManager
说明
功能描述
ThreadManager存放各类线程的列表;
主要方法描述
涉及数据
1.xxxRunnerList:
存放IRunner接口的线程的引用;
2.xxxThreadList:
存放Thread类的引用;
备注
第4章生成种子子系统
4.1模块描述
本子模块是爬虫搜索的业务起点。
本模块从时间轴上看有两个阶段的任务:
一是整理种子的输入;二是把种子load到队列中。
每个任务业务上分为为网页采集服务和为二级域名采集服务两种业务。
第一个任务可描述为:
通过整理用户维护的源种子文件并持久化,形成网页采集种子;或从嗅探数据中过滤获取需要的二级域名种子并持久化,形成二级域名采集种子。
第二个任务可描述为:
通过同步机制,将持久化的种子load到内存队列中。
如下图(图4-1)所示。
(图4-1)生成种子模块描述图
Ø输入:
n网页采集种子生成子模块:
用户维护的种子链接文件;
n二级域名采集种子生成子模块:
嗅探数据;
Ø输出:
n网页采集种子生成子模块:
与持久化的种子同步的队列;
n二级域名采集种子生成子模块:
与持久化的种子同步的队列;
Ø运行时机:
1.主线程启动时;
2.用户维护的种子文件的目录有新种子文件时;
3.配置文件指定启动为二级域名采集种子生成模块收集种子时;
4.2模块类图
【相关说明】:
1.IRunner和RealRunner为线程活动控制相关类,在其他模块中亦然;
2.FileSeedReformater和DBSeedScanner通过代理模式使用RealRunner;为业务相关类;
3.SeedDBHandle为DB接口类;
4.还需要两类把种子自动装载到DownloadQueue/DomainDownloadQueue的线程;
4.3模块序列图
整理种子阶段:
【相关说明】:
4.4重要类和接口描述
AbstractSeedProcessor
说明
功能描述
AbstractSeedProcessor处理种子的超类;通过Proxy模式使用RealRunner来实现IRunner接口,IRunner接口是其生命活动控制的接口,另实现Runnable使其可以具有线程生命;
主要方法描述
1.read:
抽象方法,该方法在子类实现时,分为读文件和读数据库两种数据来源;
涉及数据
备注
该类未实现Runnable的run方法;
FileSeedReformater类:
说明
功能描述
FileSeedReformater是处理用户输入的种子数据,格式化后写入DB;继承了AbstractSeedProcessor,而AbstractSeedProcessor帮它实现了IRunner接口的所有方法,另该类实现Runnable使其可以具有线程生命;
主要方法描述
1.read:
overwrite了AbstractSeedProcessor的方法;扫描目录,读取种子文件内容;
2.run:
线程接口方法,调用read、backup和SeedDBHandle的import方法;
3.backup:
private方法,备份处理完成的种子文件,并删除当前种子文件;
涉及数据
1.seedFileDir:
种子文件目录;
2.seeds:
种子,表映射类;
备注
DBSeedScanner
说明
功能描述
DBSeedScanner是处理嗅探数据来源的种子数据,格式化后写入DB;继承了AbstractSeedProcessor,而AbstractSeedProcessor帮它实现了IRunner接口的所有方法,另实现Runnable使其可以具有线程生命;
主要方法描述
1.filter:
过滤嗅探数据,将二级域名的数据过滤出来;
2.read:
实现了AbstractSeedProcessor的方法;根据配置的策略,调用SeedDBHandle的scan方法读取数据库中的二级域名的信息作为种子;
3.run:
线程接口方法,调用filter和SeedDBHandle的scan、import方法;
涉及数据
1.gnAppData:
嗅探数据,表映射类
2.seeds:
种子,表映射类;
备注
SeedDBHandle
说明
功能描述
SeedDBHandle是DB接口类,按照Seed的格式写入DB;
主要方法描述
1.scan:
扫描嗅探数据,将二级域名的数据扫描出来;
2.import:
根据Seed数据格式,写入DB;
3.loadSeeds,deleteSeed,updateSeed,addSeed:
增删改种子和load所有种子;
4.getMaxOrder,getMinOrder:
取得种子的最大顺序值和最小顺序值;
涉及数据
1.seeds:
种子,表映射类;
备注
第5章网页数据采集子系统
5.1Http访问组件模块
5.1.1模块描述
本模块负责http连接和获取http头信息。
业务逻辑为:
从网页采集种子队列中读取种子,然后通过httpClient连接外部wap/www网络,并把http头信息保存到HttpHeader中,最后封装httpHeader,连接资源的引用等信息存入HeaderQueue中。
Ø输入:
网页采集种子;
Ø输出:
封装的HttpHeader和连接资源;
Ø运行时机:
1.主线程启动该业务线程后;
2.且种子队列中有待访问种子;
3.且HeaderQueue未超过警戒长度;
5.1.2模块类图
5.1.3模块序列图
5.1.4重要类和接口描述
1.IDownloadQueue
说明
功能描述
IDownloadQueue是种子队列接口,其实现类应设有待访问种子队列和已访问种子队列;
主要方法描述
1.getNextInQueue:
取出待访问队列中的下一个种子(Seed);抛出CrawlerServiceException(RuntimeException的子类)
2.enQueue:
种子Seed入待访问队列,若种子已经访问过,则入队列不成功,种子被废弃;成功返回true,失败返回false;抛出CrawlerServiceException
3.size:
待访问种子队列长度;
4.visitedSize:
已访问种子队列大小
涉及数据
seed:
种子,表映射类;
备注
2.StaticDownloadQueue
说明
功能描述
StaticDownloadQueue是种子队列管理类,当中使用类似于单例模式拥有IDownloadQueue的一个实例instance,访问IDownloadQueue通过锁定StaticDownloadQueue的instance来实现同步与互斥;
主要方法描述
涉及数据
instance:
IDownloadQueue的静态实例;
备注
3.HttpClientCallback
说明
功能描述
HttpClientCallback连接wap和www网络,处理取得的资源信息的类,和HttpClientTemplate结合使用;
主要方法描述
1.processHttpRequest:
通过回调访问wap、www的网络资源,把关注的http头信息放入HttpHeader中,把http内容流的引用放入HttpContent中,URL及其描述文字放入Seed中;
涉及数据
1.seeds:
种子,表映射类;
2.httpHeader:
存放http头信息;
3.httpContent:
存放http内容Stream的引用;
备注
4.HttpClientTemplate
说明
功能描述
HttpClientTemplate是HttpClinet的封装,封装了URL,HttpClient实例,Http拦截器,http方法等资源;
主要方法描述
1.HttpClientTemplate:
构造方法,根据资源初始化HttpClient实例,初始化Http方法,初始化Http拦截器;
2.execute:
执行HttpClientCallback的业务逻辑;
3.close:
释放资源
涉及数据
seeds:
种子,表映射类;
备注
5.HeaderSpider
说明
功能描述
HeaderSpider是具有生命的爬虫,主要是根据URL种子爬去其HttpHeader,并将HttpHeader存入队列中;
主要方法描述
1.getSeed:
从待访问种子队列中取得种子,并更新数据库待访问和已访问种子列表;
2.crawl:
爬取数据,相关数据分别存入HttpHeader,HttpContent,Seed中;
3.init:
初始化爬虫,实例化HttpClinetCallback;
涉及数据
1.seeds:
种子,表映射类;
2.httpHeader:
存放http头信息;
3.httpContent:
存放http内容Stream的引用;
备注
6.IHeaderQueue
说明
功能描述
IHeaderQueue是暂时存放HttpHeader以及HttpClientTemplate实例引用的队列接口;
主要方法描述
1.getNextInQueue:
取出HttpHeader队列中的下一个种子(HttpHeaderExt);抛出CrawlerServiceException(RuntimeException的子类);
2.enQueue:
封装的Http头和链接资源的HttpHeader入队列;成功返回true,失败返回false;抛出CrawlerServiceException;
3.size:
队列大小;
涉及数据
1.httpHeader:
存放http头信息;
2.httpClientTemplate:
保存并管理链接资源的模板
备注
7.StaticHeaderQueue
说明
功能描述
StaticHeaderQueue是封装的HttpHeader队列管理类,当中使用类似于单例模式拥有IHeaderQueue的一个实例instance,访问IHeaderQueue通过锁定StaticHeaderQueue的instance来实现同步与互斥;
主要方法描述
涉及数据
1.instance:
IHeaderQueue的静态实例
备注
5.2网页采集URLs/ContentType过滤器、分类器模块
5.2.1模块描述
本模块负责给访问到的Http连接按网页链接属性过滤和分类。
本模块的一般过程为:
先读取配置文件的过滤接口的实现类列表,然后从HeaderQueue读取http头信息,然后根据头信息过滤,过滤通过的URL封
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 爬虫 系统 详细 设计 说明书 V0 2.1
![提示](https://static.bdocx.com/images/bang_tan.gif)