Я полагаю, вы столкнулись с головоломкой в функции start_requests()
с контекстом yield
в ней.
Например:
def start_requests(self):
urls = [
'http://quotes.toscrape.com/page/1/',
'http://quotes.toscrape.com/page/2/',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
Когда вы обращаетесь к документу scrapy spider и затем находите функцию с именем start_requests()
, он говорит, что метод должен вернуть итерацию. Если вы измените yield на return, он не будет повторяться, поскольку цикл for уже закончился, когда вы запускаете spider.Это может быть беспорядок.
Вполне естественно, что ваш паук должен посылать http-запросы в эти пункты назначения один за другим, поэтому лучший способ - это генератор. В цикле for ваш паук остановится на yield
и вернется scrapy.Request()
, когда все будет сделано, ваш паук send()
отправит генератор и перейдет к следующему
следующие URL-адреса в списке.