2011年10月24日

Larbin代码分析

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

posted @ 2011-10-24 23:01 zhoulinhu 阅读(910) 评论(0) 推荐(0) 编辑

LARBIN源代码分析[12]GLOBAL文件中的四个INIT初始化模块函数

摘要: 一 在global.cc文件中的global构造函数中,存在四个初始化模块函数 initSpecific() , initInput() , initOutput() , initSite() 。 下面分别分析这四个初始化函数的作用。 (1) initSpecific 函数定义在 file.cc文件中。然而却没有具体的实现,据估计是用作 处理 网页中出现的jpg 等多媒体文件的。 (2)initInput() 函数 ,实际上只有定义了thread_output才有实现。 (3)initOutput()函数,实际上该函数主要是调用了useroutput.cc中的inituseroutput()函 阅读全文

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

Larbin源代码分析[10]IPSITE站点的抽象类

摘要: 一 该类的功能 NamedSite中的类经过dns请求之后,就会将站点名转换为ip,然后将url transfer到Ipsite中,由Ipsite具体完成爬虫工作。二 类的具体成员参数 time_t lastAccess; //该IP最后获取的时间 bool isInFifo; //当该对象完成了一次fetch之后,将其加入到oksites中,并将其置为true,或者将一个url加入进fifo中 url *getUrl (); //获取队列中的 url对象 IPSite (); ~IPSite (); Fifo<url> tab; //队列中进行爬取的url列表 int fetch 阅读全文

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

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) 编辑

导航