美文网首页
分布式爬虫

分布式爬虫

作者: 徐辉英 | 来源:发表于2019-06-18 19:59 被阅读0次

    分布式部署就是实现多台电脑共同爬取数据

    安装scrapy-redis

    pip install scrapy-redis

    自定义spider,settings.py

    spider文件

    class XcftwoSpider(RedisCrawlSpider):

    另一种写法:

    class XcftwoSpider(RedisSpider):

    name = 'xcftwo'

    allowed_domains = ['xiachufang.com']

    redis_key = 'xcftwo:start_urls'

    settings.py文件

    # Configure item pipelines

    # 设置DUPEFILTER_CLASS,使用scrapy_redis的去重组件, 不再使用scrapy自带的去重组件了

    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

    # 设置SCHEDULER,使用scrapy_redis的调度器组件 不再使用scrapy自带的调度器组件了

    SCHEDULER = "scrapy_redis.scheduler.Scheduler"

    #不清除redis的请求记录(队列), 允许暂停和停止爬取

    SCHEDULER_PERSIST = True

    #设置请求任务的队列模式#SpiderPriorityQueue 是scrapy_redis框架默认的队列模式(有自己的优先级)SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"

    # SpiderQueue 是请求的队列模式(FifoQueue),先进先出#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"# SpiderStack 是请求的队列模式(LifoQueue),后进先出

    #SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"

    #设置redis数据库的ip和端口REDIS_HOST = '118.24.255.219'REDIS_PORT = 6380 

    # See https://doc.scrapy.org/en/latest/topics/item-pipeline.html

    ITEM_PIPELINES = {'scrapy_redis.pipelines.RedisPipeline': 400,}

    其他都不用变   

    添加起始url

    lpush qingspider:start_urls 起始的url

    执行

    scrapy runspider xxx.py



    实现分布式爬虫的关键三点:

    1.共享队列 

    2.重写Scheduler,让其无论是去重还是任务都去访问共享队列

    3.为Scheduler定制去重规则(利用redis的有序集合类型)

    如图

    你还需要做这些:

    1.将redis数据库的配置文件进行改动: protected-mode no #bind 127.0.0.1(重要!!!!)

    下载scrapy-redis

    (1).创建工程

    (2).创建基于scrawlSpider的爬虫文件

    (3).导入RedisCrawlSpider类

    (4).将start_urls更换成redis_key属性

    (5).在现有代码的基础上进行连接提取和解析操作

    (6).将解析的数据值封装到item中,然后将item对象提交到scrapy-redis组件中的管道里('scrapy_redis.pipelines.RedisPipeline': 400,)

    (7).管道会将数据值写入到指定的redis数据库中(在配置文件中进行指定redis数据库ip的编写)

    (8).在当前工程中使用scrapy-redis封装好的调度器(在配置文件中进行配置)

    (9).将起始url扔到调度器队列(redis_key)中#

    10.启动redis服务器:redis-server redis.windows.conf

    11.启动redis-cli

    12.执行当前爬虫文件:scrapy runspider 爬虫文件 

    13.向队列中扔一个起始url:在redis-cli执行扔的操作(lpush redis_key的value值 起始url) 

    相关文章

      网友评论

          本文标题:分布式爬虫

          本文链接:https://www.haomeiwen.com/subject/mxuqqctx.html