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

    第一步 下载scrapy模块:

      pip install scrapy-redis

    第二步 创建项目

      在终端/cmd进入创建项目的目录: 

    cd 路径:

    scrapy startproject douban(项目名)
      导入到pycharm中

    第三步 创建爬虫类

      1.在terminal中进入项目中的spiders目录:

      输入scrapy genspider douban_spider movie.douban.com(爬虫,爬取域的范围)

    第四步 设置

      非分布式爬虫设置:

      1.将ROBOTSTXT_OBEY = True 改为 False

      2.打开管道:
    ITEM_PIPELINES = {
    'JD_redis.pipelines.JdRedisPipeline': 300,
    'scrapy_redis.pipelines.RedisPipeline': 400, # 分布式爬虫中添加
    }
      3.打开该设置并修改:
    DEFAULT_REQUEST_HEADERS = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en',
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
    }
      4 .添加下面设置
    # 使用去scrapy-redis里的重组件,不使用scrapy默认的去重方式
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    # 使用scrapy-redis里的调度器组件,不使用默认的调度器
    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    # 允许暂停,redis请求记录不丢失
    SCHEDULER_PERSIST = True
    # 默认的scrapy-redis请求队列形式(按优先级)
    SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
    #指定redis数据库的连接参数
    REDIS_HOST = '127.0.0.1'
    REDIS_PORT = 6379

    第五步 编写项目(在原来的非分布式爬虫项目中修改)

      1.修改spider文件:

    原来的文件是:

    import scrapy
    from JD.items import JdItem
    class BookSpider(scrapy.Spider):
    name = 'book'
    # allowed_domains = ['jd.com','p.3.cn']
    start_urls = ['https://book.jd.com/booksort.html']
    修改为:

    import scrapy
    from scrapy_redis.spiders import RedisSpider
    from JD.items import JdItem
    class BookSpider(scrapy.Spider):
    name = 'book'
    allowed_domains = ['jd.com','p.3.cn']
    # start_urls = ['https://book.jd.com/booksort.html']
      redis_key = 'book:start_urls' # book可以自己随意取

    只修改了两个地方,一个是继承类:由scrapy.Spider修改为RedisSpider

    然后start_url已经不需要了,修改为:redis_key = "xxxxx",其中,这个键的值暂时是自己取的名字,

    一般用项目名:start_urls来代替初始爬取的url。由于分布式scrapy-redis中每个请求都是从redis中取出来的,因此,在redis数据库中,设置一个redis_key的值,作为初始的url,scrapy就会自动在redis中取出redis_key的值,作为初始url,实现自动爬取.

      2.运行:

        在命令中输入: scrapy runspider douban_spider.py(爬虫文件名)

      3来到redirs服务器中,输入初始url   

    lpush books:start_urls https://book.jd.com/booksort.html

  • 相关阅读:
    Springboot+resteasy定时任务
    MySql COUNT(),SUM()组合用法
    MySql按每日、每周、每月分组统计数据
    阿里云通过访问地址来缩小图片,减少流量消耗
    ExtJs6获取form里的数据
    postfix中recipient/client/sender/helo四者的区别<转载>
    用telnet命令,POP3接收邮件
    用telnet命令,SMTP发送邮件
    Linux 标准目录结构
    centos minimal Bind 主从服务器部署
  • 原文地址:https://www.cnblogs.com/lnd-blog/p/11695971.html
Copyright © 2011-2022 走看看