2016-12-29 61 views
0

我有一個post請求像如何參數後推入scrapy,Redis的

def start_requests(self): 
    yield FormRequest(url,formdata={'id': "parameter from redis"}) 

我可以使用Redis的-CLI LPUSH保存之後的參數和我的履帶運行呢?

回答

0

默認情況下,scrapy-redis隊列只能使用url作爲消息。 One message =一個網址。但是你可以修改這個行爲。 例如,你可以使用一些對象爲您的短信/請求:

class ScheduledRequest: 
     def __init__(self, url, method, body) 
      self.url = url 
      self.method = method 
      self.body = body 

它傳遞給排隊的JSON編碼DIC:

redis.lpush(
     queue_key, 
     json.dumps(
      ScheduledRequest(
       url='http://google.com', 
       method='POST', 
       body='some body data ...' 
      ).__dict__ 
     ) 
    ) 

並重寫make_request_from_data和schedule_next_requests方法:

class MySpiderBase(RedisCrawlSpider, scrapy.Spider): 

    def __init__(self, *args, **kwargs): 
     super(MySpiderBase, self).__init__(*args, **kwargs) 

    def make_request_from_data(self, data): 
     scheduled = ScheduledRequest(
      **json.loads(
       bytes_to_str(data, self.redis_encoding) 
      ) 
     ) 
     # here you can use and FormRequest 
     return scrapy.Request(url=scheduled.url, method=scheduled.method, body=scheduled.body) 

    def schedule_next_requests(self): 
     for request in self.next_requests(): 
      self.crawler.engine.crawl(request, spider=self) 

    def parse(self, response): 
     pass