我正在编写一个Scrapy蜘蛛,其目的是向远程服务器发出请求以充填缓存。这是一个无限的搜寻器,因为我需要在固定间隔后发出请求。我创建了最初的蜘蛛,它会生成请求并命中服务器,它工作正常,但是现在当我使其无限运行时,我没有得到响应。我什至尝试在process_response
中间件中进行调试,但直到那里我都无法获得蜘蛛。这是我正在实现的代码草图
def generate_requests(self, payloads):
for payload in payloads:
if payload:
print(f'making request with payload {payload}')
yield Request(url=Config.HOTEL_CACHE_AVAILABILITIES_URL, method='POST', headers=Config.HEADERS,
callback=self.parse, body=json.dumps(payload), dont_filter=True, priority=1)
def start_requests(self):
crawler_config = CrawlerConfig()
while True:
if not self.city_scheduler:
for location in crawler_config.locations:
city_name = location.city_name
ttl = crawler_config.get_city_ttl(city_name)
payloads = crawler_config.payloads.generate_payloads(location)
self.city_scheduler[location.city_name] = (datetime.now() + timedelta(minutes=ttl)).strftime("%Y-%m-%dT%H:%M:%S")
yield from self.generate_requests(payloads)
答案 0 :(得分:1)
在start_requests中的while循环中,似乎scrapy具有某些奇怪的行为。您可以在scrapy repo here上查看类似的增强功能。 在parse方法中移动while循环逻辑将解决此问题。