用python进行分布式网页数据抓取(一)——设计
来源:互联网 发布:sql 2008 查询分析器 编辑:程序博客网 时间:2024/05/16 13:53
这几天做一个小项目,分给我的模块是对于BOKECC体系网站的抓取。
从来没有用过python,这次来尝一下鲜,感觉还行~
BOKECC就是一个视频网站的解决方案,我的任务很简单,就是给定一个网址,我来抓取对应页面上的数据内容。
整个系统采用分布式架构,我来负责做爬虫节点。
简单来说就是整个系统可分布式部署,每个节点接收来自控制者的远程调用,独立完成任务,并向上级汇报完成情况。
这里采用暴露WebService的方式来提供接口。
功能需求点
概述
输入
提供webservice接口供主控调用,异步启动爬虫任务。
输出
1. 在正常接收、启动任务后立即给主控返回接收成功。
2. 在完成任务/任务失败后调用主控提供的回调接口。
3. 抓取成功后,将抓取数据保存至数据库。
错误处理
抓取异常情况下,应该将错误原因汇报给主控,并记录日志。
并发性需求
模块支持多线程并发调用。
BOKECC体系网站有非常多个,通过进行实际情况调研,发现各个页面在数据上有所不同(但大同小异),为了省事,我决定只用一套代码来爬取所有对应站点。那就要求我们的代码具有通用性。
另外,客户端要实现0配置,爬取的结果写入数据库。(数据库配置参与也应该由控制者——WEB接口调用者来决定)。所以我们在节点上维护一个数据库连接池。
大致流程如下:
在实际编码过程中也没有严格遵守此流程,进行了相应的扩展,不过大体如上。
日志记录设计:
日志条目
级别
记录信息
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
下面一节将进入正式编码阶段。
- 用python进行分布式网页数据抓取(一)——设计
- 用python进行分布式网页数据抓取(二)—— 核心问题讨论
- 用python进行分布式网页数据抓取(三)—— 编码实现
- python分布式抓取网页
- Python 抓取网页 (一)
- python 抓取网页数据
- Python学习之网页抓取(一)
- 用 python 抓取网页中的动态数据
- python抓取网页(一)--获得网页链接
- 用scrapy进行网页抓取
- 用scrapy进行网页抓取
- 用scrapy进行网页抓取
- 用scrapy进行网页抓取
- 使用Jsoup进行网页数据抓取
- 使用PHP进行网页数据抓取小结
- 网页数据抓取——使用jsoup
- 利用Python抓取和解析网页(一)
- 利用Python抓取和解析网页(一)
- 火狐字体难看的问题解决
- 技术博客
- Hibernate之映射值类型集合(组件的集合之list)
- 深入剖析Spring Web源码(七) - DispatcherServlet的实现 - 根共享环境的加载/其他Servlet
- struts2.1或2.2不能识别的部分标签
- 用python进行分布式网页数据抓取(一)——设计
- 【转】啪嗒砰2 —— 双神器拿法
- 设置弹出的窗口大小和跳转路径
- linq to sql 插入值,以及如何取回自增的ID
- 蚁群算法ACO(ant colony optimization)的原理以及实现源代码(转)
- Centos 5.4下的编译安装 xmms 和 mplayer
- 居然说博客没激活
- AT91SAM9G45开发板—记
- 第二部分:将MPLAYER 嵌入到MFC的对话框程序中