��� ������
������scrapy���Scheduler������������������������������������������Request������������������������������������+������������������������������������������url���������
���������������������������������������������������������������������������������������������������������Redis���
������������Scrapy���Scheduler������������Scheduler���������������������Request������������������������Request���������������������������������������������������������������������#1���������������#2���������Scheduler������������������������������������������������������������#3������Scheduler���������������������������redis������������������
������������������scrapy-redis���������������������
#���������pip3 install scrapy-redis#���������D:\python3.6\Lib\site-packages\scrapy_redis
������scrapy-redis������
1������������scrapy-redis���������������
#���������������D:\python3.6\Lib\site-packages\scrapy_redis\dupefilter.py#������������scrapy������redis���������������������������#2.1 ���settings.py���������������RedisREDIS_HOST = 'localhost' # ���������REDIS_PORT = 6379 # ������REDIS_URL = 'redis://user:pass@hostname:9001' # ������URL���������������������������REDIS_PARAMS = {} # Redis������������REDIS_PARAMS['redis_cls'] = 'myproject.RedisClient' # ������������Redis���Python������REDIS_ENCODING = "utf-8" # redis������������ # ���������������D:\python3.6\Lib\site-packages\scrapy_redis\defaults.py#2.2 ���scrapy���������������������������DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"#������scrapy-redis������������������������������������������������������Redis������������������#2.3���������������Redis������������key������key=���������������Request������������������DUPEFILTER_KEY = 'dupefilter:%(timestamp)s'#���������dupefilter.py���������������key = defaults.DUPEFILTER_KEY % {'timestamp': int(time.time())}#2.4���������������������������dupefilter.pydef request_seen(self, request): """Returns True if request was already seen. Parameters ---------- request : scrapy.http.Request Returns ------- bool """ fp = self.request_fingerprint(request) # This returns the number of values added, zero if already exists. added = self.server.sadd(self.key, fp) return added == 0#2.5������request������������������������������������������from scrapy.http import Requestfrom scrapy.utils.request import request_fingerprintreq = Request(url='http://www.baidu.com')result=request_fingerprint(req)print(result) #75d6587d87b3f4f3aa574b33dbd69ceeb9eafe7b#2.6������������ - URL��������������������������������������������� - ������������������������������������include_headers��������������������������� - ��������� from scrapy.utils import request from scrapy.http import Request req = Request(url='http://www.baidu.com?name=8&id=1',callback=lambda x:print(x),cookies={'k1':'vvvvv'}) result1 = request.request_fingerprint(req,include_headers=['cookies',]) print(result) req = Request(url='http://www.baidu.com?id=1&name=8',callback=lambda x:print(x),cookies={'k1':666}) result2 = request.request_fingerprint(req,include_headers=['cookies',]) print(result1 == result2) #True
2���������scrapy-redis���������+���������������������������
#1������������D:\python3.6\Lib\site-packages\scrapy_redis\scheduler.py#2���settings.py������# Enables scheduling storing requests queue in redis.SCHEDULER = "scrapy_redis.scheduler.Scheduler" # ���������������������������������pickle������������������������������������������������������������������������������������������PriorityQueue���������������������FifoQueue���������������LifoQueue������������ SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue' # ������������redis������request������������������������������������pickleSCHEDULER_SERIALIZER = "scrapy_redis.picklecompat" # ���������������������������������������������redis������key SCHEDULER_QUEUE_KEY = '%(spider)s:requests' # ���������������������������������������������������������������True=���������False=������ SCHEDULER_PERSIST = True # ��������������������������� ���������������������������True=���������False=��������� SCHEDULER_FLUSH_ON_START = False # ���������������������������������������������������������������������������������������������������������������������������������������������������������������������cpu��������������� SCHEDULER_IDLE_BEFORE_CLOSE = 10 # ������������������redis���������������������key SCHEDULER_DUPEFILTER_KEY = '%(spider)s:dupefilter' # ������������������������������������������request_fingerprint(request)������������������������������������ SCHEDULER_DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'
3������������
#���������������������������������������������������item���������������������������pipeline���������������/������������������,scrapy-redis���������������pipeline���������������������������item������redis��� #1������item������������redis������������key������������������ REDIS_ITEMS_KEY = '%(spider)s:items'REDIS_ITEMS_SERIALIZER = 'json.dumps' #2���������������������item������
4������Redis���������������URL
scrapy������������������������������������������������������������������������������������������������������������������������������������������������������scrapy���������������scrapy-redis������������������������scrapy���redis���������������url���������������scrapy������������������������������������������������������������������������������������������������������������redis���������������������������url���#������������������#1���������������������������URL���redis���Key���������REDIS_START_URLS_KEY = '%(name)s:start_urls' #2���������������URL���������������������������������������������������True������������False���������REDIS_START_URLS_AS_SET = False # ������������URL���������������True������������self.server.spop������������False������������self.server.lpop