Да, вы можете сделать, чтобы списки выполняли цикл так, чтобы в программе был только один экземпляр текста scrapy.Request()
, но, конечно, будучи циклом, функция будет вызываться один раз за цикл:
class SiteFetching(scrapy.Spider):
name = 'Site'
def start_requests(self):
links = [('https://www.rev.com/freelancers/transcription', self.parse_transcription),
('https://www.rev.com/freelancers/captions', self.parse_caption),
('https://www.rev.com/freelancers/subtitles', self.parse_subtitles)]
return [scrapy.Request(link[0], callback=link[1]) for link in links]
Другой вариант, если вы хотите избежать одновременного выполнения всех запросов и ожидания их возврата, это использовать выражение генератора:
return (scrapy.Request(link[0], callback=link[1]) for link in links)
Кстати, я ничего не знаю о Spideretc
Теперь вы звоните start_requests()
, но он возвращает генератор, и вы вызываете next()
, чтобы сделать каждый Request()
:
sf = SiteFetching() # I assume this is how you instantiate SiteFetching
gen = sf.start_requests() # Only returns a generator
req = next(gen) # Only here does the first call to Request() occur with callback to follow.
Я показал только один экземплярвызова next()
, но у вас может быть цикл (или итерация по нему с помощью for), но в любом случае вы можете сказать, когда происходит Request()
и что вы делаете до и после каждого вызова.