2011年10月24日

Larbin源代码分析[9]NAMEDSITE站点的抽象类

摘要: 一 类的主要功能 NamedSite 该类为一个主站点的抽象类,主站点类似www.baidu.com.二 类的主要成员变量 /* name of the site */ (1)char name[maxSiteSize]; //主站点的名称 (2)uint16_t port; //主站点的端口号 (3)uint16_t nburls; //内存中该站点的所有url的数目 (4)url *fifo[maxUrlsBySite]; //内存中该站点的url缓冲区队列 (5)uint8_t inFifo; //内存中队列的队首 (6)uint8_t outFifo; //内存中队列的尾部... 阅读全文

posted @ 2011-10-24 17:35 zhoulinhu 阅读(384) 评论(0) 推荐(0) 编辑

Larbin源代码分析[7]LARBIN中的2种容器4个URL队列

摘要: 一 larbin中的2中类型的队列 static SyncFifo<url> *URLsPriority; //最高优先级 static SyncFifo<url> *URLsPriorityWait; //次高优先级 static PersistentFifo *URLsDisk; //低优先级 static PersistentFifo *URLsDiskWait; //最低优先级 上述4个URL队列的优先级,由上到下依次递减。 四种url队列的具体使用,留待以后分析。二 下面主要分析 SyncFifo 该类实际上为一个同步处理的先进先出的队列。 1 类的主要成员变 阅读全文

posted @ 2011-10-24 17:14 zhoulinhu 阅读(341) 评论(0) 推荐(0) 编辑

Larbin源代码分析[6]LARBIN中线程处理类

摘要: 一 线程类 larbin下的线程操作类,主要在mypthread.h中定义,实质上是利用宏定义,封装了pthread.h中的系统调用。 一个进程可以有多个线程,每个线程都有自己的处理流程。 二 具体实现 typedef void* (*StartFun) (void *); void startThread (StartFun run, void *arg); startThread 函数实质上是 调用pthread_create 启动一个新的线程。 //下面为线程同步的操作#define mypthread_cond_init(x,y) pthread_cond_init(x,y)#defi 阅读全文

posted @ 2011-10-24 16:13 zhoulinhu 阅读(262) 评论(0) 推荐(0) 编辑

Larbin源代码分析[5]HASHDUP类对象的实现

摘要: 一 类的成员变量及主要功能 (1) 成员变量 ssize_t size; //表示hash 表的大小 char *table; //表示hash存储区域 char *file; //表示存储的文件,内存中的hash表可以保存在外部磁盘中 (2) 主要功能 该类和hashTable代码比较相似,但是hashTable处理的是url去重,而hashDup处理的是网页内容的去重, 不会对完全相同的网页进行爬取,但是不保证相似网页的排重。改进的一个方向。二 具体的成员函数 构造函数 hashDup (ssize_t size, char *init, bool scratch); size表示hash 阅读全文

posted @ 2011-10-24 16:02 zhoulinhu 阅读(268) 评论(0) 推荐(0) 编辑

Larbin源代码分析[4]HASHTABLE类对象的实现

摘要: 一 hashTable类对象 作用:爬虫将爬取的url存储在该类对象中,存储方式是,url对象的hashcode,映射到对应的表项中。 其中每一个url,映射成对应table中的一个bit,其中表空间大小为 64000000(单位为bit),大小的定义存储在types.h头文件中。 爬去到的url需要在hashTable中进行一次查找,若是不存在,则进行进一步遍历。已经存在,则不需要遍历。二 成员函数 HashTable(bool created ) 构造函数 ~HashTable() 析构函数 save() ; 将hashTable存储在文件中。 test(url * U) ;判断对应的ur 阅读全文

posted @ 2011-10-24 15:58 zhoulinhu 阅读(275) 评论(0) 推荐(0) 编辑

Larbin源代码分析[3]URL类分析

摘要: 一 分析utils包中的url类 该类代表实际中的一个url,成员变量主要有 ,char * file ,char * host , uint16_t port , int8_t depth, char * cookie 还有一个public属性的in_addr表示一个ipv4的地址。 成员函数中主要有一些,比如构造函数,返回url,添加cookie等操作。二 实例代码如下// Larbin// Sebastien Ailleret// 15-11-99 -> 14-03-02/* This class describes an URL */#ifndef URL_H#define UR 阅读全文

posted @ 2011-10-24 15:33 zhoulinhu 阅读(433) 评论(0) 推荐(0) 编辑

2011年10月23日

Larbin源代码分析[2]global源代码分析

摘要: 在main.cc的main函数中刚开始调用了global的构造函数,global函数中有一行是parseFile,它是用于解析配置文件larbin.conf文件的。“UserAgent”: UserAgent“From”: 使用者的邮箱“startUrl”: 开始爬取的url“waitduration”: 访问同一服务器的时间间隔“proxy”: 代理服务器信息“pageConnexions”: 最大并行连接数“dnsConnexions”: DNS最大并行连接数“httpPort”: 用于使用者查看抓取信息的端口“inputPort”: 用于向labin添加url等输入信息的telnet端口 阅读全文

posted @ 2011-10-23 21:55 zhoulinhu 阅读(413) 评论(0) 推荐(0) 编辑

Larbin源代码分析[1]hashtable checker

摘要: 在larbin里判断用一个URL是否被抓取过,用的是bloomfilter算法(至少网上的人这么说),但是我感觉与《数学之美系列二十一 - 布隆过滤器(BloomFilter)》中所介绍的算法有着很大的不同,因为larbin中只是简单用了hash方法,它有点像位图法,但我的算法很一般,意见仅供参考。先看一下hashTable的类定义:class hashTable {private:ssize_t size;char *table;public:/* constructor*/hashTable(boolcreate);/* destructor */~hashTable(); /* save 阅读全文

posted @ 2011-10-23 21:42 zhoulinhu 阅读(417) 评论(0) 推荐(0) 编辑

2011年10月22日

搜索引擎Larbin结构分析

摘要: 互联网是一个庞大的非结构化的数据库,将数据有效的检索并组织呈现出来有着巨大的应用前景,尤其是类似RSS的以XML为基础的结构化的数据越来越多,内容的组织方式越来越灵活,检索组织并呈现会有着越来越广泛的应用范围,同时在时效性和可读性上也会有越来越高的要求。这一切的基础是爬虫,信息的来源入口。一个高效,灵活可扩展的爬虫对以上应用都有着无可替代的重要意义。要设计一个爬虫,首先需要考虑的效率。对于网络而言,基于TCP/IP的通信编程有几种方法。第一种是单线程阻塞,这是最简单也最容易实现的一种,一个例子:在Shell中通过curl,pcregrep等一系统命令可以直接实现一个简单的爬虫,但同时它的效率问 阅读全文

posted @ 2011-10-22 11:12 zhoulinhu 阅读(301) 评论(0) 推荐(0) 编辑

导航