用python进行分布式网页数据抓取(一)——设计

这几天做一个小项目,分给我的模块是对于BOKECC体系网站的抓取。

从来没有用过python,这次来尝一下鲜,感觉还行~

BOKECC就是一个视频网站的解决方案,我的任务很简单,就是给定一个网址,我来抓取对应页面上的数据内容。

整个系统采用分布式架构,我来负责做爬虫节点。

用python进行分布式网页数据抓取(一)——设计

简单来说就是整个系统可分布式部署,每个节点接收来自控制者的远程调用,独立完成任务,并向上级汇报完成情况。

这里采用暴露WebService的方式来提供接口。

功能需求点

概述

输入

提供webservice接口供主控调用,异步启动爬虫任务。

输出

1. 在正常接收、启动任务后立即给主控返回接收成功。

2. 在完成任务/任务失败后调用主控提供的回调接口。

3. 抓取成功后,将抓取数据保存至数据库。

错误处理

抓取异常情况下,应该将错误原因汇报给主控,并记录日志。

并发性需求

模块支持多线程并发调用。

BOKECC体系网站有非常多个,通过进行实际情况调研,发现各个页面在数据上有所不同(但大同小异),为了省事,我决定只用一套代码来爬取所有对应站点。那就要求我们的代码具有通用性。

另外,客户端要实现0配置,爬取的结果写入数据库。(数据库配置参与也应该由控制者——WEB接口调用者来决定)。所以我们在节点上维护一个数据库连接池。

大致流程如下:

用python进行分布式网页数据抓取(一)——设计

在实际编码过程中也没有严格遵守此流程,进行了相应的扩展,不过大体如上。

日志记录设计:

日志条目

级别

记录信息

WebService接口被调用

Info

调用方IP及各接口参数

主控身份校验失败

Warn

调用方IP

开始建立/更新数据库连接池

Info

数据库参数

数据库连接失败

ErrorNotify

失败原因

数据库连接成功

Info

开始启动爬虫任务

Debug

开始抓取网页

Info

URL

一次网页抓取超时

Warn

当前重试次数

一次网页抓取异常

Warn

异常原因

重试范围内网页抓取失败

ErrorNotify

网页抓取成功

Debug

开始内容匹配

Info

正则表达式匹配失败

ErrorNotify

失败字段、失败原因

正则表达式匹配成功

Debug

开始更新数据库

Info

SQL操作

Debug

SQL语句

更新数据库完成

Debug

写数据库异常

ErrorNotify

当前执行的SQL语句,异常原因

任务成功

Info

技术选型:

开发平台: windowsXP

部署平台: 跨平台

编程语言:python2.5

IDE+plug-inMyEclipse 7.0 + pydev

具体使用的python技术:

功能

技术选型

网页抓取

urllib2

内容解析,正则表达

re

WebService

ZSI2.0

SOAP协议

SOAPpy(ZSI依赖)

XML

pyXML(ZSI依赖)

Web服务器

ZSI自带SOAP SERVER Apache

发布、部署

Windows平台:py2exe

下面一节将进入正式编码阶段。

你可能感兴趣的:(python)