@Jack444

Как использовать async в Scrapy?

Интересно как в скрапи приостановить метод до тех пор пока выполняется другой метод вызванный колбеком и после продолжить тот же метод.

Пример:
class Crawler(scrapy.Spider):
    name = 'Example'
  
    def parse(self, response):
    """ Здесь какой-то код """
        s = 0
        a = response.css('div.hello::text').get()
        if a is None: # Если объекта "а" нету отправляемся парсить другую страницу
            yield Request(url=url, callback=self.parse1)
            s += 1

    """ Здесь код продолжается  и в конце проверяет счетчик"""
        if s:
            yield Request(url=response.url, callback=self.parse)

    def parse1(self, response):
        a = response.css('div a::attr(href)'),get()
        a.save()


В общем код проверяет значение и если его нету то отправляется парсить страницу где 100% есть это значение и накручивает счетчик, в конце счетчик проверяется и если он трушный то начинает себя парсить заново.
В итоге он загоняет самого себя в вечный цикл а объекты которые он отправил парсить на другую сгенерированную страницу находятся походу в очереди потока.
С async знаком мало, но попробывал поставить ко всем def у внутри вызывать "await asyncio.sleep(2)" но привило к ошибке "RuntimeError: no running event loop".
Подскажите как асинк тут правильно использовать?

Чтобы скрапи работал с асинкио, нужно добавить в настройки.
TWISTED_REACTOR = 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'

Но все равно не очень понятно как его использовать с методами генераторами. В документации пайтон и скрапи почти нет информации.
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы