📄 pagestat.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 + -