配置界面开始创建内存池初始化URL队列下载网页提取网页链接加入到URL队列分析网页满足停止条件否是结束界面显示结果 图3-3 系统流程图
3.2 数据结构设计
系统中主要是使用了链表作为URL队列,而链表中的每个结构体是一个数据单元,数据单元中的元素及其含义如表3-1:
表3-1 数据结构表
字段 host port dir page file pageinfo url title 类型 char * int char * char * char * char * char * char * 含义 网页所在的主机 网络服务器所使用的端口 网页所在的目录 网页文件名 本地保存的文件名 保存网页信息的文件名 存储网页链接 网页的标题 6
keywords body protocal url_count type code page_size is_handled brother child char * char * char int char * char * int char strcut * struct * 网页的关键字 网页的摘要 连接使用的协议 0 -http 1-- https 网页中的链接数目 网页类型 网页编码 网页大小 是否处理过 兄弟节点链表指针 子节点链表指针 系统把初始的链接保存在了init_url文件中;把一些异常情况保存在了crawl.log文件中;把下载的网页文件保存在了page_db文件夹中;把网页信息文件保存在page_info文件夹中;把网页中链接文件保存在了page_url文件夹中;把网页文件名称,网页信息文件名称,网页链接文件名称保存在link.db文件中。
3.3 系统各功能流程图
(1) 主模块功能流程图如图3-5:
创建内存池初始化URL队列调用下载模块和分析模块接口函数释放内存池 图3-4 主模块流程图
需要说明的问题:
① 指向内存池的是一个全局变量指针。
② 初始的URL必须从文件中读取,然后调用函数get_host()解析
出URL的host, page, dir, port。 ③ 必须要有全局变量指向URL队列的头。
7
(2) 功能模块流程图如图3-6:
构造GET请求链接网站服务器发送GET请求接受网站的数据分析HTTP报文头 图3-5 下载模块流程图
需要说明的问题:
① 启动线程下载。
② 对于GET请求不变动的部分使用宏定义。
③ 在链接服务器前需要建立socket套接字并进行域名解析。 ④ 注意HTTP报文头的接受。
(3) 功能模块流程图如图3-7:
解析网页标题把新的URL添加到URL队列否把网页读入内存解析网页关键字解析网页编码和类型解析网页链接并统计满足条件是结束功能模块
图3-6 解析模块流程图
需要说明的问题:
1) 利用系统函数把网页读入内存。 2) 利用正则表达式提取相关信息。 3) 把一个网页的URL写入文件保存。
(4) 功能模块流程图如图3-8:
8
配置.php配置爬去深度,添加初始URL爬虫系统等待。。。显示.php链接.php信息.php网页.php 图3-7 界面流程图
需要说明的问题:
① 配置界面配置爬行深度的参数必须大于0。 ② 每个界面必须有返回按钮和返回首页的按钮。 ③ 配置界面输入的URL不能为空。
9
相关推荐: