TSE(Tiny Search Engine)介绍

TSE是北京大学网络实验室推出的微型搜索引擎,类似天网的简化版,包括网页抓取、分词和倒排索引等模块。代码使用C++编写,效率高,功能强大。本文介绍了TSE的爬虫实现,包括网页抓取流程、URL处理和线程管理等细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TSE是Tiny Search Engine(“微型搜索引擎”)的简称,由北京大学网络实验室出品

这个实验室推出过当年教育网搜索颇有名气的 “北大天网搜索”

天网培养了中文互联网早期的一批的搜索技术专家

bd的技术路线和TSE很像

 

TSE包括网页抓取、分词、倒排索引生成等模块,可以视为天网的袖珍版。

代码用C++开发,短小精干,运行效率很高

我感觉实际效果比开源的一些Spider要好,修改起来也很方便

 

  • TSE网页抓取

 

开始是main函数,在main.cpp

如果控制台参数是1个,就进行搜索:

CSearch iSearch;
   iSearch.DoSearch();

如果控制台参数是2个,就运行网络爬虫:

CCrawl iCrawl(argv[2], "visited.all");
   iCrawl.DoCrawl();

其中 argv[2]是inputfile visited.all是outputfile.

在DoCrawl函数里,初始化是把已经访问过的url加入到一个集合中去,

即调用函数GetVisitedUrlMD5(),这个函数里,主要是读取一个文件:

while( getline(ifsMD5,strMD5) ){
   setVisitedUrlMD5.insert(strMD5);
}

setVisitedUrlMD5就是一个已经访问过的url集合

同理于 GetVisitedPageMD5();GetIpBlock();

GetUnreachHostMD5();

分别读取文件内容到setVisitedPageMD5,mapIpBlock,setUnreachHostMD5

set<string> setVisitedUrlMD5;
set<string> setVisitedPageMD5;

map<unsigned long,unsigned long> mapIpBlock;

其中 setUnreachHostMD5 是从文件读出不能到达的url,然后对这个url取了一个MD5值,存进内存中这个集合的.

这些前期工作做完以后,就开始读取种子文件,也就是开始爬取采用的起始url.

先是打开所有的输出流文件,函数是OpenFilesForOutput().也就是将来爬取得结果存放的文件.这里面包括索引文件(专门的类来打开),visited.url,link4SE.url,link4History.url(这个可能存放的是一篇HTML中的图像链接),unreach host file,visited url md5 file,visited page md5 file.

for(unsigned int i=0; i< NUM_WORKERS; i++){
   if( pthread_create( &tids[i], NULL, start, this))
    cerr << "create threads error" << endl;
}

启动10个线程,每个线程执行的函数是start,参数是this指针

在启动线程的同时,读取种子文件的url

while( getline(ifsSeed, strUrl) ){

//对读到的url进行一些处理后,调用AddUrl(strUrl)函数

AddUrl(strUrl.c_str());

}

也同时读取未访问的url

while( getline(ifsUnvisitedUrl, strUrl) ){

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值