數據去重 生成指紋:利用hashlib的sha1,對request的請求體、請求url、請求方法進行加密,返回一個40位長度的16進位的字元串,稱為指紋 進隊: 如果請求需要過濾,並且當前請求的指紋已經在指紋集合中存在了,就不能進入隊列了 如果請求需要過濾,並且請求的指紋是一個新的指紋,進入隊列 如 ...
數據去重
- 生成指紋:利用hashlib的sha1,對request的請求體、請求url、請求方法進行加密,返回一個40位長度的16進位的字元串,稱為指紋
fp = hashlib.sha1() fp.update(to_bytes(request.method)) fp.update(to_bytes(canonicalize_url(request.url))) fp.update(request.body or b'') return fp.hexdigest()
- 進隊:(隊列對requests對象去重,zset對指紋去重)
- 如果請求需要過濾,並且當前請求的指紋已經在指紋集合中存在了,就不能進入隊列了
- 如果請求需要過濾,並且請求的指紋是一個新的指紋,進入隊列
- 如果不需要過濾,直接進入隊列
def enqueue_request(self, request): if not request.dont_filter and self.df.request_seen(request): self.df.log(request, self.spider) return False self.queue.push(request) return True
分散式爬蟲
- 類繼承RedisSpider、RedisCrawlSpider
- 使用redis_key,在redis資料庫中存儲start_urls的鍵名稱
每臺電腦從redis資料庫中對應的redis_key名稱中獲取url,發起請求。