Colly 爬虫,为 Retry 添加一个简单的计数器

Colly 的 Retry 函数,设计理念不知道是什么,一旦使用了 Retry 访问了一个本就有问题的链接,就会无限循环访问,永不停止。

我们就手动添加一个map用来计录链接的重试次数。

下面的代码简单有效,但只对GET方法有效。

// RetryCounter GET方法重试计数器
type RetryCounter struct {
	// method string
	Urls map[string]uint
	Max  uint
	Lock sync.RWMutex
}

// Get 获取计数
func (r *RetryCounter) Get(url string) uint {
	r.Lock.RLock()
	defer r.Lock.RUnlock()
	return r.Urls[url]
}

// Add 计数器加一
func (r *RetryCounter) Add(url string) {
	r.Lock.Lock()
	defer r.Lock.Unlock()
	count := r.Urls[url]
	r.Urls[url] = count + 1
}

// NewRetryCounter 新的计数器
func NewRetryCounter(max uint) *RetryCounter {
	r := new(RetryCounter)
	r.Max = max
	r.Urls = make(map[string]uint)
	return r
}
posted @ 2021-01-28 14:00  thepoy  阅读(354)  评论(0编辑  收藏  举报