网络爬虫项目概要.docx
《网络爬虫项目概要.docx》由会员分享,可在线阅读,更多相关《网络爬虫项目概要.docx(10页珍藏版)》请在冰豆网上搜索。
网络爬虫项目概要
标准化管理处编码[BBX968T-XBB8968-NNJ668-MM9N]
网络爬虫项目概要
Linux实训项目网络爬虫系统概要
1、什么是爬虫
是一个软件机器人,是可控的,可以可以从互联网上抓取我们所需的资源。
爬虫是搜索引擎后台的第一个子系统,数据入口之一。
2、爬虫能做什么
搜索引擎的基础应用
抓取大数据的一种手段
网页下载器
网店秒杀
3、关于项目
时间安排:
4天
关于需求、设计、编码、测试、集成
需求:
设计:
分为业务设计和技术设计。
业务设计是业务层的方案。
对我们软件设计师来讲,业务就是我们的系统想要完成一个工作,要经过哪些步骤或流程。
技术设计:
关于框架和处理流程,注意要采用面向对象的思维方式。
编码:
使用基本的技术细节进行系统实现
测试:
对是对我们系统可靠性的一个监测
集成:
将每个程序员开发的模块或子系统合成为一个完成的系统
思维方式:
线性思维方式与发散思维方式。
软件开发要掌握的思想:
模块思维
渐进式开发
4、需求:
自动抓取网络资源的软件。
1、资源是什么网页、图片、音乐、视频等
2、自动化是什么样子一旦运行就不需要更多的干预。
生成需求说明文档。
内容:
对需求中不明确或不完善的说明进行解释。
功能点、附加要求、性能要求等
5、设计
业务设计:
如何思考并完成设计
注意:
从顶层开始思考并设计,避免过早的陷入细节。
系统最粗浅的数据流
设计处理流程:
1、得到爬取种子(URL)
2、根据爬取种子下载资源(页面)
3、解析页面,提取更多的URL
4、对页面做持久化操作
5、根据提取的URL再进行下载操作
6、重复第2步到第5步
系统设计:
系统结构图
注意:
设计阶段必不可少
设计可以使我们的思路更清晰,可以提高工作效率,可以提高代码质量。
详细设计:
注意:
对系统或模块设计要有输入和输出。
控制器模块
控制器由三个模块组成:
1、配置文件处理模块:
从配置文件中读取配置项,提供配置项的提取接口
2、URL维护模块:
负责维护URL库,提供如下功能
a)输入新的URL
b)输出一个未被抓取的URL
c)负责维护URL的抓取状态
3、任务调度模块
a)负责协调控制器的流程
b)负责调用其他系统模块完成工作
4、维护URL列表数据结构
6、控制器设计
配置文件解析模块
配置文件是以文件形式保存程序运行时必要的参数,减少输入时的繁琐过程。
文件类型是文本文件,内容一般以键值对形式出现。
概要设计:
配置文件内容:
key=value形式
注释规则:
注释字符串前以“#”标记。
配置项设置:
项目
字段
并发任务数
job_num
url种子
seed
抓取深度
deeps
输出日志的等级
log_level
模块存放路径(唯一)
Module_path
模块名称(模块文件名,可以多个)
Module_name
允许抓取的资源类型(多个,文件后缀)
file_type
模块详细设计:
操作:
1、读取配置文件
2、得到配置文件选项的值(键值)
3、初始化
ptivate:
1、o文件
2、维护.so文件中的接口函数
设计原则:
1、一个功能一个模块
2、可以自我维护
a)维护版本号
b)知道自己的名称
c)维护本模块内部的接口
d)可以对模块进行初始化
设计模块的描述结构:
字段
名称
主版本号
version
次版本号
subver
模块名称
name
入口函数指针
int(*handle)(void*);
初始化函数指针
int(*init)(Module*);
设计入口函数指针原型
int(*handle)(void*);
设计初始化函数指针原型
int(*init)(Module*);
模块管理器设计:
1载入模块的操作
IntLoad(char*path,char*name);
Module*getModule(char*name);
载入模块操作的处理流程:
1通过路径找到模块文件(.so)
2调用dlopen打开动态库(.so)
3使用动态库
4关闭动态库文件
7、下载器设计
下载器模块分为socket功能封装与Http功能模块
http协议对资源请求的操作get指令
HTTP头描述:
http头以文本形式体现在http协议包中
HTTP包的内容由HTTP头进行描述,描述的格式:
一条数据一行,每条描述以描述字段名称开头,
Socket功能框架设计:
1初始化socket
2向服务器发送请求
3接受服务器反馈的数据
4设置socket模式
把socket句柄注册到epoll处理事件中。
(在主流程中)
HTTP协议处理模块
1解析头
2组装头
提取HTTP数据内容(单独一个模块)
设计两个模块:
文本处理模块(html格式),二进制处理模块(image/jpg/png等各式),还可以继续添加其他文件处理模块(PDF、流媒体等)
注意:
需要了解的相关知识:
1http协议(可以通过查询RFC协议文档了解更多)RFC文档是用来解释网络协议的一种文档集合
GET指令
请求头的结构
反馈头的结构
2http协议传输文件的模式
http协议描述
8页面解析器设计
html文档,是一种标记性语言
对页面解析的目的:
得到页面中存在的下级URL
URL保存在标签的href属性中
可以通过正则表达式提取页面中的URL。
注意提取到的URL深度。
页面解析的处理流程:
1得到下载的页面
2得到页面对应的URL结构体(用于得到当前页面的深度)(注意判断是否已经达到最大深度)
3使用正则表达式得到页面中所有的URL列表
4处理URL中的相对路径
5一个细节:
把当前页面深度加一,生成并填充URL结构体6把得到的URL列表回写到URL管理器中(生成列表数据,以返回值形式回传给上层代码)
9持久化器设计
仍然以模块形式生成
分为网页保存模块和图片保存模块
注意,如果涉及到网页编码需要进行转码操作(本系统不对此进行操作)
处理流程
1得到页面的数据流或在内存缓冲区的数据
2得到当前页面的URL描述结构体
3生成保存目录(目录已存在和未存在的处理情况)
4把文件按照指定模式写入磁盘系统
5向主处理流程发送一个反馈,表示当前页面处理的进度
系统的核心代码:
1、系统主处理框架
2、Epoll框架的调用
3、插件框架的完整实现
4、Soket功能封装
5、http协议头解析
6、html解析并提取URL列表
7、URL管理器实现
后续工作:
如何进行单元测试cunit。
把软件做成系统服务,需要shell脚本。
集成测试。