1.引言
1.1编写目的
将之前会议中记录的设计要点进行总结和规划,供团队内开发者和测试人员进行代码编写与测试。
1.2项目背景
软件名: 网络资源收集工具
本软件任务:为下一组元数据抽取和整理工具进行对接,为下一组提供其所需的各类海量数据。
2.任务概述
2.1目标
总的目标是编写一个更快捷,更稳定的爬虫软件,维护并改善学长的代码并在其基础上进行完善创新。
分开来讲有学长代码规范的编写,学长遗留BUG的修复,多个种子链接功能的添加,广告过滤功能的优化,暂停爬取功能的实现,关键词筛选功能的添加与完善,实时显示抓取过程的图表功能的增加,得到网页的热度排序TOP10的网页,问答页面的筛选与爬取功能的实现,问答页面的筛选与爬取功能的实现,pdf页面的筛选与爬取功能的实现,doc页面的筛选与爬取功能的实现,ppt页面的筛选与爬取功能的实现。
2.2运行环境
系统:WINDOWS XP,WINDOWS 7,WINDOWS 8
Java版本:需安装最新版本的JRE
数据库版本:在联网的环境下可以直接连接服务器的数据库,版本为SQL Server 数据库位置:表名:[yuanhang].[dbo].[fileinfo]
2.3需求概述
将35w+个符合条件的网页,问答,文章放入数据库,具体请参见需求文档。
2.4条件与限制
首先,大多数的站点具有排斥爬虫访问的机制,在一段时间内的同一IP的并发访问容易发生暂时拒绝本地客户端的连接导致的503错误。
其次,网络上可以进行爬取的pdf、ppt、doc文件大多不能符合要求,而与计算机领域紧密相关的pdf、ppt、doc又基本很多都需要注册用户并且具有足够的积分或者账户充值。
3.总体设计
3.1处理流程
需求分析和文档编写
阅读学长代码和学习相关知识
为学长代码编写代码规范
M1代码编写、复审与测试
ALPHA版本发布
总结上阶段经验教训
M2代码编写、复审与回归测试
BETA产品发布
3.2总体结构和模块外部设计
Analysis.java
BarChart.java
ConnectServer.java
CraUi.java
DownLoadFile.java
DownloadQuiz.java
DownloadPdf.java
DownloadPPt.java
DownloadDoc.java
HistogramJPanel.java
HtmlParserTool.java
Keyword.java
LinkFilter.java
LinkQueue.java
Logo.java
MyCrawler.java
PieChart.java
Queue.java
RankUrl.java
State.java
Url.java
主要分五个模块:
UI模块
网页过滤模块
文件下载模块
数据库更新模块
数据分析模块
外部数据库元组数据项:
网页id
域名
文件存储路径
编码方式
网页类型
最后被爬到的时间
更新时间
关键词
标签
IP地址
3.3功能分配
Keyword模块 |
DownLoadFile模块 |
ConnectServer模块 |
DownloadQuiz模块 |
RankUrl模块 |
HistogramJPanel模块 |
PieChart模块 |
BarChart模块 |
|
过滤 |
√ |
√ |
||||||
下载文件 |
√ |
√ |
||||||
连接数据库 |
√ |
|||||||
爬取问答页 |
√ |
|||||||
热度排序 |
√ |
|||||||
可视化 |
√ |
√ |
√ |
|||||
DownLoadPdf模块 |
DownLoadDoc模块 |
DownLoadPPt模块 |
HtmlParserTool模块 |
|||||
过滤 |
√ |
√ |
√ |
√ |
||||
下载文件 |
√ |
√ |
√ |
|||||
连接数据库 |
√ |
√ |
√ |
|||||
爬取问答页 |
√ |
|||||||
热度排序 |
||||||||
可视化 |
√ |
√ |
√ |
4.接口设计
4.1用户接口
用户界面:
多种子网址输入框、关键词输入框、爬取页面数输入框、选择文件录入多种子网站复选框、已访问URL视图、实时动态展示图、进度条、开始爬取按钮、爬取问答页按钮、爬取pdf按钮、爬取doc按钮、爬取ppt按钮。
4.2内部接口
LinkFilter为DownLoadFile、DownloadQuiz、DownloadPdf、DownloadDoc、DownloadPPt和Keyword提供过滤器的接口
Url为DownLoadFile、DownloadQuiz、DownloadPdf、DownloadDoc、DownloadPPt和RankUrl提供网址相关属性接口
State为PieChart、HistogramJPanel和CraUi提供状态更新的接口
5.数据结构设计
5.1逻辑结构设计
1、Url:
数据项: 域名 oriUrl、IP地址 url、网页编号 urlNo、结果码 statusCode 、被别的文章引用的次数 hitNum 、对应文章的汉字编码 charSet 、文章摘要 abstractText 、作者 author 、文章的权重 weight 、文章的描述 description 、文章大小 fileSize 、最后修改时间 lastUpdateTime 、过期时间 timeToLive 、文章名称 title 、文章类型 type 、引用的链接 urlRefrences
2、RankUrl:
数据项: 域名 url 、网站类别 UrlKind 、网址热度排名集合 outUrls
3、Queue:
数据项: 将要访问的URL队列 queue
4、LinkQueue:
数据项: 已访问的url集合visitedUrl 、待访问的url集合unVisitedUrl 、seedurl集合seedUrls 、tag集合 tagtext 、Url得分表 urlsScoreTable
5、DownLoadFile:
数据项: 一级页面网址 myUrl 、过滤器 myFilter 、文件存储路径oripath 、存入数据库ID号 C_ID 、是否符合过滤条空间 flag
6、DownLoadPdf:
数据项: 一级页面网址 myUrl 、过滤器 myFilter 、文件存储路径oripath 、存入数据库ID号 C_ID
7、DownLoadDoc:
数据项: 一级页面网址 myUrl 、过滤器 myFilter 、文件存储路径oripath 、存入数据库ID号 C_ID
8、DownLoadPPt:
数据项: 一级页面网址 myUrl 、过滤器 myFilter 、文件存储路径oripath 、存入数据库ID号 C_ID
9、DownloadQuiz:
数据项: 一级页面网址 myUrl 、类别需求 PageKind 、文件存储路径oripath1~5 、存入数据库ID号 C_ID 、是否符合过滤条空间 flag
10、Keyword:
数据项: 关键词 keyword
11、ChartPanel:
数据项:参见JDK_API文档
12、HtmlParserTool
数据项: 解析器parser
5.2物理结构设计
1、Url:
数据项: 域名 oriUrl(String)、IP url(String)、网页编号 urlNo(int)、结果码 statusCode(int)、被别的文章引用的次数 hitNum(int)、对应文章的汉字编码 charSet(String)、文章摘要 abstractText(String)、作者 author(String)、文章的权重 weight(int)、文章的描述 description(String)、文章大小 fileSize(int)、最后修改时间 lastUpdateTime(Timestamp)、过期时间 timeToLive(Date)、文章名称 title(String)、文章类型 type(String)、引用的链接 urlRefrences(String[])
2、RankUrl:
数据项: 域名 url(String)、网站类别 UrlKind(int)、网址热度排名集合 outUrls(Set<RankUrl>)
3、Queue:
数据项: 将要访问的URL队列 queue(LinkedList<Object>)
4、LinkQueue:
数据项: 已访问的url集合visitedUrl(Set<RankUrl>)、待访问的url集合unVisitedUrl(ConcurrentLinkedQueue<RankUrl>)、seedurl集合seedUrls()、tag集合 tagtext()、Url得分表 urlsScoreTable()
5、DownLoadFile:
数据项: 一级页面网址 myUrl(RankUrl)、过滤器 myFilter(LinkFilter)、文件存储路径oripath(String)、存入数据库ID号 C_ID(int)、是否符合过滤条空间 flag(boolean)
6、DownLoadPdf:
数据项: 一级页面网址 myUrl(RankUrl)、过滤器 myFilter(LinkFilter)、文件存储路径oripath(String)、存入数据库ID号 C_ID(int)
7、DownLoadDoc:
数据项: 一级页面网址 myUrl(RankUrl)、过滤器 myFilter(LinkFilter)、文件存储路径oripath(String)、存入数据库ID号 C_ID(int)
8、DownLoadPPt:
数据项: 一级页面网址 myUrl(RankUrl)、过滤器 myFilter(LinkFilter)、文件存储路径oripath(String)、存入数据库ID号 C_ID(int)
9、DownloadQuiz:
数据项: 一级页面网址 myUrl(RankUrl)、类别需求 PageKind (int)、文件存储路径oripath1~5(String)、存入数据库ID号 C_ID(int)、是否符合过滤条空间 flag(boolean)
10、Keyword:
数据项: 关键词 keyword(String)
11、ChartPanel:
数据项:参见JDK_API文档
12、HtmlParserTool
数据项: 解析器parser(Parser)
外部数据库元组数据项:
网页id int(11)
域名 nvarchar(max)
文件存储路径 nvarchar(max)
编码方式 nchar(10)
网页类型 nchar(10)
最后被爬到的时间 datetime (25)
更新时间 datetime (25)
关键词 text
标签 text
IP地址 nvarchar(max)
5.3数据结构与程序的关系
程序数据结构
Url |
RankUrl |
Queue |
LinkQueue |
DownLoadFile |
DownloadQuiz |
Keyword |
ChartPanel |
|
RankUrl |
√ |
√ |
||||||
LinkQueue |
√ |
√ |
||||||
DownLoadFile |
√ |
√ |
√ |
|||||
DownLoadQuiz |
√ |
√ |
√ |
|||||
BarChart |
√ |
|||||||
PieChart |
√ |
|||||||
MyCrawler |
√ |
√ |
√ |
√ |
√ |
|||
DownLoadPdf |
DownLoadDoc |
DownLoadPPt |
||||||
RankUrl |
√ |
√ |
√ |
|||||
LinkQueue |
||||||||
DownLoadFile |
||||||||
DownLoadQuiz |
||||||||
BarChart |
||||||||
PieChart |
||||||||
MyCrawler |
√ |
√ |
√ |
6.运行设计
6.1运行模块的组合
通用型爬取: RankUrl模块,DownLoadFile模块,ConnectServer模块,HistogramJPanel模块,PieChart模块,BarChart模块
聚集型爬取: Keyword模块,DownLoadFile模块,ConnectServer模块,HistogramJPanel模块,PieChart模块,HtmlParserTool模块
综合型爬取: Keyword模块,RankUrl模块,DownLoadFile模块,ConnectServer模块,HistogramJPanel模块,PieChart模块,HtmlParserTool模块
问答页爬取: DownloadQuiz模块,ConnectServer模块,HistogramJPanel模块,PieChart模块,HtmlParserTool模块
pdf爬取: DownloadPdf模块,ConnectServer模块,HistogramJPanel模块,PieChart模块,HtmlParserTool模块
doc爬取: DownloadDoc模块,ConnectServer模块,HistogramJPanel模块,PieChart模块,HtmlParserTool模块
ppt爬取: DownloadPPt模块,ConnectServer模块,HistogramJPanel模块,PieChart模块,HtmlParserTool模块
6.2运行控制
通用型爬取: 输入种子网址以及需要爬取网页数,将所需网页分类添加到数据库中。
聚集型爬取: 输入关键词以及需要爬取网页数,将所需网页分类添加到数据库中。
综合型爬取: 输入种子网址、关键词以及需要爬取网页数,将符合条件的所有网页分类添加到数据库中。
问答页爬取: 输入需要爬取网页数,选择需要爬取的问答页面种类,将符合条件的所有问答页添加到数据库中。
pdf爬取: 选择种子txt,将符合条件的所有问答页添加到数据库中
doc页爬取: 选择种子txt,将符合条件的所有问答页添加到数据库中
ppt页爬取: 选择种子txt,将符合条件的所有问答页添加到数据库中
6.3运行时间
通用型爬取:
DownLoadFile模块 |
ConnectServer模块 |
RankUrl模块 |
HistogramJPanel模块 |
HtmlParserTool模块 |
PieChart模块 |
BarChart模块 |
|
时间 |
55% |
10% |
5% |
10% |
5% |
2% |
3% |
聚集型爬取:
DownLoadFile模块 |
ConnectServer模块 |
RankUrl模块 |
HistogramJPanel模块 |
PieChart模块 |
HtmlParserTool模块 |
|
时间 |
70% |
10% |
3% |
10% |
2% |
5% |
综合型爬取:
Keyword模块 |
DownLoadFile模块 |
ConnectServer模块 |
RankUrl模块 |
HistogramJPanel模块 |
PieChart模块 |
HtmlParserTool模块 |
|
时间 |
5% |
65% |
10% |
5% |
10% |
2% |
3% |
问答页爬取:
ConnectServer模块 |
DownloadQuiz模块 |
HistogramJPanel模块 |
PieChart模块 |
HtmlParserTool模块 |
|
时间 |
10% |
75% |
10% |
2% |
3% |
pdf爬取:
ConnectServer模块 |
DownloadPdf模块 |
HistogramJPanel模块 |
PieChart模块 |
HtmlParserTool模块 |
|
时间 |
10% |
75% |
10% |
2% |
3% |
doc爬取:
ConnectServer模块 |
DownloadDoc模块 |
HistogramJPanel模块 |
PieChart模块 |
HtmlParserTool模块 |
|
时间 |
10% |
75% |
10% |
2% |
3% |
ppt爬取:
ConnectServer模块 |
DownloadPPt模块 |
HistogramJPanel模块 |
PieChart模块 |
HtmlParserTool模块 |
|
时间 |
10% |
75% |
10% |
2% |
3% |