zoukankan      html  css  js  c++  java
  • scrapy-redis

    修改setting.py文件

    # 1(必须). 使用了scrapy_redis的去重组件,在redis数据库里做去重
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    
    # 2(必须). 使用了scrapy_redis的调度器,在redis里分配请求
    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    
    # 3(必须). 在redis中保持scrapy-redis用到的各个队列,从而允许暂停和暂停后恢复,也就是不清理redis queues
    SCHEDULER_PERSIST = True
    
    # 4(必须). 通过配置RedisPipeline将item写入key为 spider.name : items 的redis的list中,供后面的分布式处理item
    # 这个已经由 scrapy-redis 实现,不需要我们写代码,直接使用即可
    ITEM_PIPELINES = {
        'project.pipelines.Mypipeline': 100
    }
    
    # 5(必须). 指定redis数据库的连接参数
    REDIS_HOST = '127.0.0.1'
    REDIS_PORT = 6379
    
    # 6.如果不启用则按scrapy默认的策略
    #  -1. 默认的 按优先级排序(Scrapy默认),由sorted set实现的一种非FIFO、LIFO方式。
    # SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'
    #  -2. 可选的 按先进先出排序(FIFO)
    # SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderQueue'
    #  -3. 可选的 按后进先出排序(LIFO)
    # SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderStack'
    
    # 7. LOG等级
    #LOG_LEVEL = 'DEBUG'
    

      

    spider.py

    from scrapy_redis.spiders import RedisSpider
    
    class ExampleSpider(RedisSpider):
        name = 'example'
        redis_key = 'example:start_urls'
    

     scrapy-redis 默认为get请求,那么post请求如何处理。其实这是考到你会不会变通,知识点就是中间件的process_request,正则匹配需要post请求的url规则,自行使用requests发起请求,返回 scrapy.http.HtmlResponse对象即可。相当于自行实现了download下载器

    实现Post

    查看RedisSpider源码,重写make_request_form_data即可,start_urls的post请求。若要实现自由post请自行实现中间件,判断url规则即可。

    class MySpider(RedisSpider):
        name = 'myspider'
        redis_key = "myspider:start_urls"
    
        def make_request_from_data(self, data):
    
            data = json.loads(data)
            url = data.get('url')
            form_data = data.get('form_data')
            logging.info("start page {}".format(form_data.get('Page')))
            return scrapy.FormRequest(url=url, formdata=form_data, callback=self.parse)
    

      

    insert_start_urls.py

    import json
    import redis
    
    r = redis.Redis()
    
    def insert_start_urls():
        key = "myspider:start_urls"
        url = "http://www.baidu.com"
        formdata = {
            "":""
        }
        for i in range(100):
            result = {
                "url":url,
                "form_data":formdata
            }
            r.rpush(key,json.dumps(result))
    

      

  • 相关阅读:
    使用TestStack.White进行Windows UI的自动化测试
    基于IDEA的JavaWeb开发环境搭建
    hfish 集群蜜罐搭建
    HFish开源蜜罐搭建
    redis实现查找附近商户信息功能
    WIN10 HYPERV 1503
    RPC
    推荐一个聚合搜索引擎提高学习工作效率
    RocketMQ原理分析&场景问题
    《高性能利器》--异步调用实现原理详解!
  • 原文地址:https://www.cnblogs.com/zenan/p/10329389.html
Copyright © 2011-2022 走看看