分布式网络爬虫设计毕业设计Word文件下载.docx

上传人:聆听****声音 文档编号:810647 上传时间:2023-04-29 格式:DOCX 页数:4 大小:124.59KB
下载 相关 举报
分布式网络爬虫设计毕业设计Word文件下载.docx_第1页
第1页 / 共4页
分布式网络爬虫设计毕业设计Word文件下载.docx_第2页
第2页 / 共4页
分布式网络爬虫设计毕业设计Word文件下载.docx_第3页
第3页 / 共4页
分布式网络爬虫设计毕业设计Word文件下载.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

分布式网络爬虫设计毕业设计Word文件下载.docx

《分布式网络爬虫设计毕业设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《分布式网络爬虫设计毕业设计Word文件下载.docx(4页珍藏版)》请在冰点文库上搜索。

分布式网络爬虫设计毕业设计Word文件下载.docx

3.采用多线程结构设计,实现高性能的网络爬虫。

二、整体架构设计:

本系统整体架构如下图,由主线程、异步抓取线程、网页解析线程三类线程构成,其中,网页分析线程由网页分析线程池统一分配调度。

线程间的通信由网页结果队列和 URL人任务队列负责,两个消息队列由轻量级消息队列 Nanomsg创建采用Pipeline模式。

主线程主要负责异步抓取线程和网页解析线程池的创建。

异步抓取线程主要负责从 URL任务队列中获取网页网址,然后完成网页的 Socket抓取,并将得到的网页存入网页结果队列中。

网页

解析线程池主要负责分配网页解析线程从网页结果队列提取网页进行分析。

网页解析线程主

要负责从网页内容中提取出有效的 URL并存入URL任务队列。

三、架构实现要点:

完成本爬虫系统主要需要实现两个核心线程,分别是异步抓取线程和网页解析线程。

1.异步抓取线程设计

抓取线程主要靠Libevent库来实现,Libevent库是一个基于Reactor模型的一个网络库,支持异步的调用函数。

只需在初始化的时候在相应时间上一个函数,程序就会在该事件发生时调用对应的函数库。

为了实现通过Libevent完成网页的连接和抓取,需要注册两个事件 receiveResponse_cb

和eventcb,其中receiveResponse_cb负责读取,eventcb负责设置判断是否发生建立连接事件,超时事件读取结束事件等。

线程的整体逻辑如下图,首先完成相关事件注册,然后让线程处于循环查询状态,判断相关事件是否发生,如果定时事件被触发,爬取线程就会从URL任务队列中读取URL,然后通过Socket建立网络连接,并将连接事件加入队列。

如果连接建立时间被触发,则爬取线

程会向服务器发送 HTTP请求。

当连接数据事件到达事件被触发,爬取线程会读取 HTTP响

应,并将网页内容放入网页结果队列。

2.网页解析线程设计

网页解析线程主要负责解析 HTML语言,通过使用有限状态自动机提取 HTML中出现的有效连接,并将URL链接存入URL任务队列中。

其整体流程如下:

(1)从网页结果队列中读取抓取 HTML

(2)识别匹配网页字符集

(3)提取网页中的有效 URL

(4)将提取出的URL放入URL队列中

从HTML中提取链接所使用的有效状态自动机如下图:

HTML链接中的URL主要放在<

a>

标签中的href属性中,我们采用的状态机的方式提取

出标签中的URL。

分析时也需要去除 href=”#、”href=”javascript:

:

void(0)等这样”的无效链接,

对于href=”a.html#a1这”样的锚点链接,我们要将后面的锚点去掉,只留下a.html。

这样在

去重的时候,能够保证不将a.html#a1和a.html#a2视为两个链接。

同时我们需要把相对URL地址转化为绝对地址。

并将URL中无效的部分剔除掉,如某些URL后会包含?

XXXXXX,X这些对于URL地址都是无效的。

在提取过程中我们还要完成 URL的去重工作,避免反复抓取同一个 URL地址。

在本次实验中,使用的是实验一大规模字符串查找中的 TRIE树来进行查重。

在使用 TRIE树的时候,需要注意进行线程的同步。

由于上一个实验的代码是单线程的程序,所以 TRIE树的插入、查找的操作也是单线程的。

所以在使用时需要用 pthread_mutex_t来进行线程间的同步与互斥操作。

3.消息队列设计

消息队列采用的是 Nanomsg库,这是一个使用 C语言编写的一个消息队列,可以轻松

完成跨线程、跨进程、跨机器的通讯。

Nanomsg的通讯模式有 NN_PAIR、NN_REPREQ、

NN_PIPELINE等通讯模型。

本程序采用的通讯模型主要是 NN_PIPLINE的通讯模型,它是一种单向的通信,其通信模型如下图:

4.线程池

进程池线程主要采用的是threadpool.c和threadpool.h这两个文件。

其中,

create_threadpool函数新建了一个线程池, 并将线程池进行初始化操作。

在实际需要调用线程的时候,只需要使用 dispatch函数,将要调用的函数指针、参数传递进去。

线程池会自动

给你调用执行并回收资源。

通过线程池可以很好的控制分析线程运行的个数, 做到按需来分配线程,避免了因频繁生成和销毁线程造成的线程开销。

四、实验结果:

经过多次运行,该程序总共分析出了个 153596链接地址,总共文件大小为10458295052字节

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2