看着曾经自己写的文档,一丝笑意涌过心头。一分是为当时稚嫩的设计,一分是为当时入神入微,矜矜业业的态度。
这个设计是一个系统的数据抓取部分的设计,如果现在让我设计,肯定完全是另一个样。此系统早已不再运行,所以可以放心的拿出来,仅博一笑。
XXXX站点监控——详细信息爬虫设计
版本:V0.1
作者:XX
时间:2010-9-13
需求
根据视频title及页面URL,到具体网页中抓取视频各项属性及信息。
功能需求点 |
概述 |
输入 |
提供webservice接口供主控调用,异步启动爬虫任务。 |
输出 |
1. 在正常接收、启动任务后立即给主控返回接收成功。 2. 在完成任务/任务失败后调用主控提供的回调接口。 3. 抓取成功后,将抓取数据保存至数据库。 |
错误处理 |
抓取异常情况下,应该将错误原因汇报给主控,并记录日志。 |
并发性需求 |
模块支持多线程并发调用。 |
实际情况调研
根据各XXXX网站HTML源码分析,在界面/结构上基本相同,但在不同网站、或者同一网站部同视频间存在若干细微的“版本”差异,所以需要在开发过程中,制定良好的爬取方案以适应各站点视频页面上的变化。
接口设计
使用WebService接口,SOAP协议。
l 版本
http://xxxxx/netvideo/bokecc/vinfoant/version?wsdl
INTPUT:NULL
OUTPUT:当前版本
如 0.1
l 爬取
http://xxxxx/netvideo/bokecc/vinfoant/run?wsdl
INPUT:
参数 |
描述 |
类型 |
备注 |
dbip |
连接数据库IP |
String |
|
dbport |
连接数据库端口 |
Integer |
|
dbname |
数据库名 |
String |
|
dbuser |
数据库用户名 |
String |
|
dbpw |
数据库密码 |
String |
|
videoId |
需爬取的视频id |
Integer |
|
sessionId |
任务id |
Integer |
|
timeout |
超时时间 |
Integer |
|
callbackAddr |
回调地址 |
String |
任务完成之后调用的地址 |
OUTPUT:
Responese(WebService调用同步返回):
Id |
描述 |
0 |
接受成功 |
-1 |
主控身份错误,禁止进入 |
-2 |
数据库连接失败 |
Callback(WebService调用异步返回):
参数 |
描述 |
类型 |
备注 |
sessionId |
任务id |
Integer |
|
status |
任务完成状态 |
Integer |
0 成功 -1 网络情况异常 -2 正则表达式匹配错误 |
流程设计
1. 爬取任务整体流程
2. 内容匹配流程
日志设计
日志条目 |
级别 |
记录信息 |
WebService接口被调用 |
Info |
调用方IP及各接口参数 |
主控身份校验失败 |
Warn |
调用方IP |
开始建立/更新数据库连接池 |
Info |
数据库参数 |
数据库连接失败 |
Error,Notify |
失败原因 |
数据库连接成功 |
Info |
|
开始启动爬虫任务 |
Debug |
|
开始抓取网页 |
Info |
URL |
一次网页抓取超时 |
Warn |
当前重试次数 |
一次网页抓取异常 |
Warn |
异常原因 |
重试范围内网页抓取失败 |
Error,Notify |
|
网页抓取成功 |
Debug |
|
开始内容匹配 |
Info |
|
正则表达式匹配失败 |
Error,Notify |
失败字段、失败原因 |
正则表达式匹配成功 |
Debug |
|
开始更新数据库 |
Info |
|
SQL操作 |
Debug |
SQL语句 |
更新数据库完成 |
Debug |
|
写数据库异常 |
Error,Notify |
当前执行的SQL语句,异常原因 |
任务成功 |
Info |
技术选型
开发平台: windowsXP
部署平台: 跨平台
编程语言:python2.5
IDE+plug-in:MyEclipse 7.0 + pydev
具体使用的python技术:
功能 |
技术选型 |
网页抓取 |
urllib2 |
内容解析,正则表达 |
re |
WebService |
ZSI2.0 |
SOAP协议 |
SOAPpy(ZSI依赖) |
XML |
pyXML(ZSI依赖) |
Web服务器 |
ZSI自带SOAP SERVER 或Apache |
发布、部署 |
Windows平台:py2exe |