搜索引擎爬虫
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
概要设计与算法思想阐述总流程图
图3-1总流程图
算法思想阐述
爬虫的广度优先遍历
存储结构:存放URL的队列
算法思想:广度优先搜索策略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。该算法的设计和实现相对简单。为覆盖尽可能多的网页,一般使用广度优先搜索方法。将广度优先搜索策略应用于聚焦爬虫中。其基本思想是认为与初始URL在一定链接距离内的网页具有主题相关性的概率很大。另外一种方法是将广度优先搜索与网页过滤技术结合使用,先用广度优先策略抓取网页,再将其中无关的网页过滤掉。
URL队列的操作模块算法分析:
利用数据结构中的采用数组实现的存放URL的队列,根据队列的相关操作:判断队列是否为空,判断队列是否已满,当前URL是否已添加,向队尾添加一个URL,从对头取出一个URL等等,以及相关线程的操作实现所要求功能。由于本程序是多线程下载,这就要求当其中一个线程在对公共区域进行操作时先将此区域锁定防止其他线程进行同样的操作,在操作完毕后在进行解锁。
查找模块算法分析
通过在加入队列时通过哈希表的查找当前URL是否已经存在于队列中来判断当前URL是否已经存在。
详细设计与算法分析
广度优先遍历模块
功能
在完成当前层次的搜索后,才进行下一层次的搜索。
流程图
存储结构与算法分析
存储结构:存放URL 的队列 。
算法分析:广度优先搜索策略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。该算法的设计和实现相对简单。也否 是 开始
获取起始URL 提取网页中所有的链接 将提取的链接存入队列中 队列是否为空 结束
有很多研究将广度优先搜索策略应用于聚焦爬虫中。
核心分析:
void MainThread::Run(CString &str_Begin)
{
//向共享数据区URL队列加入根URL
m_DownData.AddURL(str_Begin);
//访问根URL
if(m_DownData.AddThread())
{
AfxBeginThread(DownloadFile,this);
}
//依次启动工作者线程,根据共享数据区URL队列依次到指定URL下载
while(!m_bDone && !(m_DownData.IsEmpty() && m_DownData.GetCurThread()==0)) {
Sleep(100);
//判断全局变量ThreadPause,是否暂停线程
if(ThreadPause)continue;
if(m_DownData.AddThread())
{
AfxBeginThread(DownloadFile,this);
}
}
Sleep(1000);
AfxMessageBox(_T("任务完成!"));
ExitInstance();
}
Run函数是多个线程的管理程序,当队列为空时退出程序。