看着曾经自己写的文档,一丝笑意涌过心头。一分是为当时稚嫩的设计,一分是为当时入神入微,矜矜业业的态度。
这个设计是一个系统的数据抓取部分的设计,如果现在让我设计,肯定完全是另一个样。此系统早已不再运行,所以可以放心的拿出来,仅博一笑。
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 |