美文网首页
scrapy_redis中以set存入url和附带内容-写给自己

scrapy_redis中以set存入url和附带内容-写给自己

作者: wfishj | 来源:发表于2017-11-10 15:15 被阅读0次

    前言

    需求:初始化url除了url外还有其他字段信息需要附带上,以便item输出时继承这些信息
    思路:改写scrapy_redis中的next_request类,和改写将url存入redis的脚本。将需要附带的信息和url在next_request处理中进行分离,将附带的信息放入meta中从而实现继承信息。

    spider中的 next_requests

    scrapy_redis通过next_requests来制造requests,因此对其读取redis部分进行改造,另外使用Request来构造请求。读取出来的内容用json来转化。

    from scrapy.http import Request
    from scrapy.http import FormRequest
    from scrapy_redis.spiders import RedisSpider
    from scrapy_redis import connection
    from scrapy import signals
    
    class House_detail_spider(RedisSpider):
        
        name = 'ningbohdetailsd'
    
        allowed_domains = ['http://newhouse.cnnbfdc.com/']
    
        redis_key ='ningbohdetailsd:start_urls'
    
        a = redis.Redis("127.0.0.1","6379")  #redis地址,因为读取默认地址出现错误,所以在spider中链接好
        
        def next_requests(self):
    
            found = 0
    
            while found < self.redis_batch_size:
                data_raw =self.a.spop(self.redis_key) #从redis中取出内容
    
                if not data_raw:
                    break
              
                data = json.loads(data_raw)    #存入redis的内容是json,需要转化
                
                if "source_url" not in data:
                    break
                req = Request(url=data['source_url'],
                                method='GET',
                                dont_filter=True,
                                meta=data['meta'])  #发出请求
                if req:
                    yield req
                    found += 1
                else:
                    self.logger.debug("Request not made from data: %s", data)
    
            if found:
                self.logger.debug("Read %s requests from '%s'", found, self.redis_key)
    
    将种子url传入redis的脚本

    使用添加集合的方式来存入url和对应信息

        a = redis.Redis("127.0.0.1","6379")
        ddd={
                "source_url":"url"
                "meta":
                        {
                        "building_name":'12345',
                        "project_name" :'12345',
                        "project_uuid" :'12345',
                        }
                }
                
        ddd2 =json.dumps(ddd)      #将字典转化为json
        
        a.sadd('ningbohdetailsd:start_urls',ddd2)   #存入内容
    

    相关文章

      网友评论

          本文标题:scrapy_redis中以set存入url和附带内容-写给自己

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