0
我有一個post請求像如何參數後推入scrapy,Redis的
def start_requests(self):
yield FormRequest(url,formdata={'id': "parameter from redis"})
我可以使用Redis的-CLI LPUSH保存之後的參數和我的履帶運行呢?
我有一個post請求像如何參數後推入scrapy,Redis的
def start_requests(self):
yield FormRequest(url,formdata={'id': "parameter from redis"})
我可以使用Redis的-CLI LPUSH保存之後的參數和我的履帶運行呢?
默認情況下,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