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

  • 相关阅读:
    关于IE高级设置里取消“禁用脚本调试”勾选无效的解决方式
    使用NetworkStream收取数据不全问题讨论,列举目前方式,求最佳解决方式
    EntityFramework学习笔记2ORM及EntityFramework简介
    Asp.Net MVC4.0 官方教程 入门指南之一 入门介绍
    EntityFramework学习笔记4实体数据模型及增、删、改操作
    EntityFramework学习笔记3VS2010安装EF5.0
    如果页面引用了外部JS代码,会被IE缓存的解决方法
    EntityFramework学习笔记1写在学习之前
    【专题】概率dp求期望
    金华网赛G(最大费用最大流)&hdu4406
  • 原文地址:https://www.cnblogs.com/lnd-blog/p/11695971.html
Copyright © 2011-2022 走看看