注意:这篇文章主要是关于怎样设计C++爬虫代码框架,具体实现还是得自己去开发,希望大家能有所收获。
1.关于项目
需求、设计、编码、测试、集成
2.软件开发要掌握的思想
模块思维
渐进式开发
3.需求:
自动抓取 络资源的软件
1.资源是什么页、图片、音乐、图片…
2.自动化旦运行就不需要更多的干预。
生成需求说明文档。
内容:对于需求中不明确或不完善的说明进行解释
4.设计:
业务设计:从顶层开始思考设计,避免过早的陷入细节
控制器:
配置文件处理模块设计:
概要设计:
配置文件设计
key=value 形式
注释:以”#“标记
项目 字段
并发任务数 job_num
url种子 seed
抓取深度 deeps
模块存放路径 Module_path
模块名称 Module_name
允许抓取的资源类型 file_type
输出日记的等级 log_level
详细设计:
操作:
1.读取配置文件
2.得到配置文件选项的值(键值)
3.初始化
class ConfigParser
{
public:
//设计为单例模式
ConfigParser();
load();
getValue();
private:
job_num;
seed;
…
};
配置文件读取
1、按行读取fgets
2、分隔字符串
3、消除注释
4、消除空格
URL维护模块:
分析:
url格式:http://192.168.247.16/docs/linuxdev.html
结构:域名或IP地址,路径,文件名
设计URL的数据结构
项目名称 字段名称
完整URL url
协议类型 protocal
域名 Sitename
资源路径 Path
文件名 filename
当前url处理状态(0,1,-1) state
当前url深度 deep
当前资源类型 type
http协议请求页面时的流程
1.输入 址
2.向DNS发送解析请求
3.DNS返回给我们一个对应的IP地址
4.通过IP地址向资源所在的主机发送请求
5.如果资源存在,主机返回200状态,同时返回http数据部分
6.本地http客户端接收数据
页面抓取的处理流程:
1.得到URL
2.URL进入抓取队列等待抓取
3.从队列中得到一个URL,把其分配给下载器的实例
4.得到下载器的处理状态(URL的数据结构后三项)
5.得到当前页面中存在的下一级URL列表
URL维护模块操作:
1.添加新URL
2.使URL进入抓取队列
3.从抓取队列中移除一个URL
4.修改URL库中某一个URL值
5.添加新的URL的列表
下载器与解析器:
下载器模块分为socket功能封装和http功能模块
Socket功能框架设计:
1.初始化socket
2.向服务器发送请求
3.接受服务器反馈的数据
4.设置socket模式
HTTP协议处理模块
1.解析头
2.组装头
页面解析的处理流程:
1.得到下载的页面
2.得到页面对应的URL结构体
3.使用正则得到页面中所有的url列表
4.处理url的相对路径
6.把得到的url列表返回
持久化器:
处理流程:
1.得到页面数据
2.得到当前页面的url描述结构体
3.生成保存目录
4.把文件按照指定格式写入磁盘系统
5.向主流程发送一个反馈,表示当前页面处理的进度
系统核心代码:
1.系统主处理框架
2.Epoll框架的调用
3.插件框架的完整实现
4.Soket功能封装
5.http协议头解析
6.html解析并提取url列表
7.url管理器实现
项目中用到一个开源库
libevent
怎样采用开源库
1、开源库一定要成熟
a.判断成熟度br> release版,成熟的
beta版测试版
rc版发布预览版
2、使用libevent的dns解析功能
系统中可以被开源库替换的部分
下载器:
wget curl
对代码进行单元测试:
断言:#include <assert.h>
assert();
测试工具:cunit
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!