⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pagestat.h

📁 概述:数据的纵向收集
💻 H
字号:
//sunwangme@hotmail.com
#pragma once
#include <atlstr.h>

//刷新间隔time = 2^Priority分钟来算,
//按照分钟算,2^10就是一天,默认初始时候目录页是一天刷新一次,结果页10天一次,最多22.4天一次
#define _PRIORITY_MIN_			0		//1分钟
#define _PRIORITY_BASE_PARSE_	10		//0.7天
#define _PRIORITY_BASE_STORE_	13		//5.6天
#define _PRIORITY_MAX_			15		//22.4天

struct CPageStat
{
//记录
public:
	CString m_strUrl;
	CString m_strRefer;
	DWORD	m_dwContentFingerprint;
	WORD	m_wPriority;
	__int64 m_int64LastModifyTime;
	__int64 m_int64LastCrawlTime;
	WORD	m_wTotalCrawlCount;
	WORD	m_wHintCount;
	BYTE	m_bPassiveMode;	//被动模式

//对记录的操作
public:
	static bool Build(CPageStat& objPage,LPCSTR lpszUrl,LPCSTR lpszRefer,bool bPassiveMode,DWORD dwType);

//对库的操作
public:
	static void Init();
	static void Fini();
	static void Put(const CPageStat& objPage);
	static bool Get(CPageStat& objPage);
	static void Del(const CPageStat& objPage);
	static bool IsEmpty();

//任务的调度
public:
	//just updater 和 CTemplate/Ex一起工作,东西丢给CPriorizer
	//由蜘蛛管理器的任务分配调用,如果失败将从模板初始化任务开始
	//模板初始化的东西也丢给CPriorizer
	static bool Updater();
protected:
	static void Build(CPageStat& objPage,FITHANDLE key,FITHANDLE value,bool bPassiveMode);

//蜘蛛状态和任务使用
private:
	static FDBHANDLE s_hDbStat;
	static long		s_uOpCount;
};

//规则,sunwangme@hotmail.com,2007.3.21
//所有被动的检查页面,如果发现页面没有变化,不更改刷新频率,只修改抓取时间和抓取次数
//eg.例如目录页面到了刷新时候,发现变化了,就会抓取所有一级子页面,类推,这种一级子页面叫被动抓取
//为了简化操作,首先启动updater计算所有的当天需要更新的url进入bitmap和队列,这样被动式样的抓取就可以和主动抓取
//区别开来;bitmap对于独立站点使用8个128b的bitmap矩阵实现,如果效果不好可以增加到12、16个;
//算法是MD5(url),分4字节形成4个数取1M的模结果设置前4个bitmap,MD5(MD5(url))设置后4个bitmap
//steps:
//1.首先根据pageStat db计算出todo-list并全部加入到SeenBitmap,设置为主动模式
//2.处理todo-list,如果是主动模式,并且没有变,将刷新频率加一入库
//3.如果是主动模式变动了,将所有一级子链接和父链接加入到todo-list,并标记被动模式;当然加入前首先检查SeenBitmap;刷新频率减一入库
//4.如果是被动模式,并且没有变,只更改抓取时间和次数
//5.如果是被动模式,并且变了,刷新频率减一入库
//6.如果是新任务,根据类型,设置初始频率入库
//7.第一次时候,pageStat为空,需要根据模板来初始化todo-list,操作同6

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -