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
}