分布式爬虫
发布日期:2021-05-13 04:45:34 浏览次数:15 分类:博客文章

本文共 6255 字,大约阅读时间需要 20 分钟。

��� ������

������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'
View Code

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������
View Code

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
View Code

 

 

上一篇:爬虫之scapy
下一篇:初步算法

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月22日 01时53分07秒