zoukankan      html  css  js  c++  java
  • 分布式爬虫

    如何实现分布式爬虫

    • scrapy的url队列存在哪里? (单机内存)

    • redis是支持分布式的内存数据库

    • 可以为scrapy做一个新的调度器(redis),替换scapy的默认调度器, 从而实现分布式功能。

    scrapy-redis

    • scrapy-redis是scrapy的一个组件(插件),和 scrapy、redis配合。从而实现支持分布式爬虫

    • 负责分布式爬虫的任务调度

    • 依赖于Scrapy和redis。

    • 主要组件:Scheduler、Dupefilter、Pipeline和Spider。

    【没有使用分布式的时候】

    url存在本机内容中,如: start_urls= ['http://www.dushu.com' ] yield scrapy.Request(url)

    【使用分布式的时候】

    没有了start_urls, 而是使用redis_key,

    url存在redis中 命令行执行:redis-cli lpush myspider:start_urls 'http://www.xxx.com' 或者使用脚本执行: rds =Redis('127.0.0.1',6379)  rds.lpush(...)

    搭建分布式

    master服务器的配置

    1. 安装scrapy、scrapy-redis、redis。

    2. 修改master的redis配置文件redis.conf:

      1)将 bind 127.0.0.1 修改为bind 0.0.0.0。(注意防火墙设置)

    3. 重启redis-server
    4. 在爬虫项目文件settings.py中添加配置信息
    REDIS_HOST = 'localhost'
    REDIS_PORT = 6379

    slave端的配置

    1. 在爬虫项目的settings.py文件中配置
    REDIS_URL = 'redis://redis_server ip:6379'

    master和slave端中共同的配置

    在settings.py中启用redis存储

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

    运行分布式爬虫

    # scrapy runspider myspider_redis.py
    scrapy crawl myspider
    redis-cli -h redis_server_ip 
    redis-cli> lpush myspider_redis:start_urls http://www.xxxxxx.com/aaa/

    详细参考官方文档:https://github.com/rmax/scrapy-redis

  • 相关阅读:
    告别零码软件
    win+mingw+libxml2试用笔记
    beacon with java 1.7 on fedora
    mininet指令详解
    java Socket完美实例
    gnome3 下 qt 应用极其丑陋的解决方案
    org.apache.log4j Class Level
    Mac如何修改文本文件编码
    unity性能优化相关
    平面图判定
  • 原文地址:https://www.cnblogs.com/louyifei0824/p/9895470.html
Copyright © 2011-2022 走看看