网站采集器系统设计(产品已实现)

文章来源:视采网站采集器

1功能说明

1.关键字生成
关键子可以从关键字库、论坛中提取。人工可以直接输入关键字,并可以加入关键字库中。
2.网址获取
调用googleapi根据关键字在internet中检索,获取网址列表。人工可以直接添加或从网址库中选取网址列表。对于当前列表可以保存到网址库中,保存时注意过滤重复网址。
3.采集任务设置
系统根据采集任务进行自动化采集。任务设置包括采集的网址、过滤规则、登录信息等。
4.自动化任务设置
此任务系统定时启动。任务设置包括启动时间、采集任务等。
5.临时任务生成
系统根据googleapi检索结果,自动生成相应的采集任务。
6.人工裁剪
人工删除不需要的内容。
7.重复过滤
系统根据裁剪后的内容在本次任务集中进行查找,抛弃相同的任务。
8.级联提取
系统根据裁剪后的内容提取相关连接,包括图片、附近、flash和关联的网页。系统生存临时的子任务。
9.网站转向识别
有些网址点击之后会转向到另外一个网址,系统自动替换任务中的目标地址。
10.网站登录
对于需要登录才能看到信息内容的网站,系统能模拟用户登录。
11.字段提取
系统能够根据规则自动提取标题、正文、作者、来源、关键字及正文分页。
12.人工修改
人工编辑抓取的内容
13.关联内容
人工关联抓取的内容,关联可以从子任务中获得。也可人工从本次任务和发布库中查找。
14.入库
人工将抓取的内容保存到数据库中。系统自动检查关联的完整性。
16.抓取规则描述文件RDF.XML
使用XML语言描述抓取规则、网站结构。系统提供标签语言,如标题、作者、出处、页码、超链等。系统根据网页结构描述文件实现自动化提取、自动化发布。

2目标方向

系统终极目标就是实现全自动主题搜索、全自动化抓取,全自动化发布;不依赖googleapi搜索引擎,使用自主引擎搜索主题内容;提供内容订阅服务。

3总体策略

  • 任务规则通过xml格式定义。以任务为独立单元。一个任务中的过滤器可以互相共享数据,前一个过滤的结果可以作为后一个过滤器的输入。
  • 系统能够根据过滤器的输入依赖关系,自动调整过滤器的执行顺序。
  • 提供数据库操作描述,可以将抓取的结果自动的发布到数据库中。
  • 输入源一般是url,系统根据url自动抓取相应的页面作为任务的输入。

4模块结构

说明:图中箭头表示模块间的数据流向。任务之间为多线程并发执行。过滤器树根据过滤器的输入关系构建树状结构,树中同一层的过滤器为多线程并发执行。网站采集器将hash码保存到自有的数据库中,以便以后唯一性检查。

5用例

6类图

配置文件解析:
说明:ConfigParser在系统启动时候解析RDF.xml配置文件。解析结果存放在TaskEntity、FilterEntity、DatabaseEntity中。
TaskEntity对应标签:<task><id></id><atuotime></atuotime>…</task>;
FilterEntity对应标签: <filter><in></in><keys><key>…</key></keys></filter>
DatabaseEntity对应标签:<database>…<sql>…</sql></database>
 
过滤器引擎:
说明:FilterRunner以多线程的方式负责调度过滤器。当FilterTread向缓存输出时, FilterRunner负责启动它的下一个孩子(过滤器)。
FilterRunner充当TaskBoundary的门面,暴露OutBufferEntity。
过滤器是在RDF.XML中定义。
TreeConstruct根据过滤器之间的输入关系以树型结构放入FilterTreeEntity中。如:a、b、c、d四个过滤器。a是b的输入,b是c的输入,a是d的输入,则他们的数据结构为:
        a
       /  /
      b   d
     /
   c
他们的结构含义是:父亲是孩子的输入,兄弟之间是独立的。从线程的角度看,一条支路上的节点是顺序关系,同一层次上的节点是并列关系。所以FilterRunner负责启动a。与到a输出时启动b、d。遇到b输出时启动c。
任务引擎:
 
说明:TaskRunner以多线程的方式启动任务。
TaskTread充当OutBufferEntity的门面。当FilterBoundary向OutBufferEntity输入时,TaskTread将检查DataBaseTask所需的过滤器输出是否完全,如果完全,则启动DataBaseTask。

7典型时序图

说明:系统在第一次启动时,解析配置文件,构建过滤器树,启动任务控制器。任务控制器根据现有的任务启动任务处理线程,任务处理线程启动各自的过滤控制器。过滤器的输出将触发过滤器控制器启动下一节点的过滤器,并且触发任务控制器检查数据库操作所需的值,如果完备,则启动数据库任务。

8应用接口

系统采用开放式结构,使用门面和总控制器设计模式(自己瞎说的),暴露和隐蔽相应接口,使系统易于扩展,并且不失系统的安全和健壮性。
系统提供面向配置文件(RDF.XML)的应用接口:
l         FilterTread:过滤器的实现
l         DataBaseTask:数据库操作的实现
用户可以扩展这两个接口,实现自己业务逻辑,在RDF.XML声明。由总控制器统一调度和管理。

9RDF设计

RDF关键字定义:
<task><id></id><atuotime></atuotime>…</task>
task任务的根节点,id是任务的唯一号,atuotime:任务启动时间。如果为-1,则用不启动;
 
<page><count></count><start></start><end></end></page>
页码定义。count表明抓取多少页,start页码的开始处,end页码的结束处;
 
<filters><filter><id></id><time></time><in></in><keys><key><id></id>…</key></keys>
</filter></filters>
过滤器,id是过滤器的唯一号,time表明过滤多少次。所有的关键字都定义在过滤器中。过滤器中的多个关键字在一个上下文中提取。in是过滤器的输入,值为某一过滤器的关键字值,或者是url;
 
<database><url></url><driver></driver><username></username>
< userpassword ></userpassword><hashcode></hashcode>
<sqls><sql><id></id>…</sql></sqls></database>
数据库配置,sql文可以是select语句,也可以是update、insert等语句。Hashcode为内容的唯一标识。系统将根据此值到hashcode表中检索是否重复。
 
关键字列表:
task
page
filters
database
id
sqls
count
start
end
time
in
sql
keys
url
driver
username
userpassword
key
filter
atuotime
hashcode
 
 
 
 
 
Rdf.xml示例:
<task>
<id>t1<id>
<atuotime>10</atuotime>
<filters>
 < filter>
<id>f1</id>
  <in>http://www.sina.com.cn</in>
<page>
<count>10</count>
<start>akdfa;fakf;a</start>
<end>22;kjk;ja</end>
</page>
  <keys>
    <key>
      <id>url</id>
      <start>dfasf</start>
      <end>adkfkajf</end>
    </key>
    …
  </keys>
< filter>
< filter>
<in>f1.url</in>
  <keys>
    <key>
      <id>content</id>
      <start>dfasf</start>
      <end>adkfkajf</end>
    </key>
  </keys>
< filter>
</fileters>
</task>

10特殊说明

系统没有实现通过搜索引擎获取网站种子,在以后的版本中,将实现。

文章来源: 视采网站采集器
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值